SQL Server 中的格式字符串是什么?

发布于

在SQL Server中,该FORMAT()函数使您能够通过将“格式字符串”作为第二个参数(第一个参数是正在格式化的值)传递来将日期/时间和数字值格式化为格式化字符串。

下面是这个函数的一个例子:

FORMAT(@date, ‘dd/MM/yyyy’);

在这个示例中,格式字符串是_dd/MM/yyyy_。

此特定格式字符串指定该@date值应按顺序使用两位数的日期、两位数的月份和四位数的年份进行格式化,并使用正斜杠作为分隔符。

这将导致这样的事情:

21/05/2019

格式字符串是包含一个或多个预定义格式说明符的字符串,这些说明符是定义输出格式的单个字符或字符组。

SQL Server 仅接受 .NET Framework 支持的格式字符串。

格式字符串可以是标准格式字符串或自定义格式字符串。以下是它们的工作原理:

  • 标准格式字符串是预定义的格式字符串。它包含一个格式说明符,该说明符被解释为表示某种预定义的格式。标准格式字符串实际上是自定义格式字符串的别名。但是,实际使用的自定义格式字符串通常取决于文化。
  • 另一方面,自定义格式字符串由一个或多个自定义格式说明符组成,这些说明符相互结合,将定义格式。这使您可以更灵活地定义输出的外观。

示例 1 – 标准格式字符串

这是一个演示标准格式字符串如何工作的示例。

选择格式(1234,‘C’)作为结果;

结果:

+———–+ | 结果 | |———–| | $1,234.00 | +———–+

在本例中,C是格式字符串。在这种情况下,它是由单个格式说明符组成的标准数字格式字符串。此特定格式说明符用于表示货币金额。

我们也可以通过使用自定义数字格式字符串来获得相同的结果。

示例 2 – 自定义格式字符串

此示例产生与前一个示例相同的输出。不同之处在于,在此示例中,我使用_自定义_格式字符串而不是标准格式字符串。

选择格式(1234,’$#,###.00’)作为结果;

结果:

+———–+ | 结果 | |———–| | $1,234.00 | +———–+

自定义格式字符串允许您创建自己的自定义格式。您可以将字符串与格式说明符结合起来以构建您自己的自定义格式。

在这个例子中,我使用了#格式说明符,它是一个数字的占位符。如果数字不存在,则结果字符串中不会出现数字。

我还使用0格式说明符,它也是任何数字的占位符。但在这种情况下,如果数字不存在,则使用零代替。

我还在格式字符串中包含$、,和.文字字符串。这些完全按照原样包含在输出中。

如果我们减少输入的数量,我们可以看到格式说明符0和#格式说明符之间的结果有何不同,以及它们与C前面示例中的标准格式说明符的比较:

选择 格式(34,‘C’)作为’C’, FORMAT(34, ‘$0,000.00’) AS ‘0’, FORMAT(34, ‘$#,###.00’) AS ‘#’;

结果:

+——–+————+——–+ | C | 0 | # | |——–+———–+——–| | $34.00 | $0,034.00 | $34.00 | +——–+————+——–+

正如您可能想象的那样,自定义格式字符串比标准格式字符串提供了更多的灵活性。

但是,在许多情况下,标准格式字符串可能更强大,尤其是在生成考虑文化的动态结果时。更多关于文化的内容。

示例 3 – 格式化日期和时间

日期/时间值还提供标准或自定义格式字符串的选择。这是使用标准格式字符串以及一些自定义格式字符串格式化的日期/时间值的示例。

声明@date datetime2(7); SET @date = ‘2080-05-01 23:09:08.1234567’; 选择 FORMAT(@date, ’d’) 作为’d’, FORMAT(@date, ‘M/d/yyyy’) AS ‘M/d/yyyy’, FORMAT(@date, ‘dd/MM/yy’) AS ‘dd/MM/yy’, FORMAT(@date, ‘ddd, MMM dd, yy’) AS ‘ddd, MMM dd, yy’, FORMAT(@date, ‘dddd, dd MMMM yyyy’) AS ‘dddd, dd MMMM yyyy’;

结果:

+————+————+————+———— ——–+————————+ | d | 月/日/年年 | 日/月/年 | ddd, 嗯 dd, yy | dddd, dd MMMM yyyy | |————+————+————+———— ——-+————-| | 2080 年 5 月 1 日 | 2080 年 5 月 1 日 | 80 年 1 月 5 日 | 80 年 5 月 1 日,星期三 | 2080 年 5 月 1 日,星期三 | +————+————+————+———— ——–+————————+

第一个使用标准格式字符串,其他四个使用自定义格式字符串。

有关可用日期和时间格式字符串的完整列表,请参阅以下内容:

示例 4——文化

格式字符串的结果有时可能取决于所使用的文化。例如,在美国,短日期格式表示为“M/d/yyyy”,但在英国则表示为“dd/MM/yyyy”。

默认情况下,当前会话的语言用于定义文化。但是,该FORMAT()函数允许您覆盖它。

该函数的语法如下所示:

FORMAT(值,格式[,文化])

因此,它允许您将文化指定为可选参数。

这是一个示例,说明不同的文化可能导致单个格式字符串产生多种不同的格式。

声明@date datetime2(7); SET @date = ‘2080-05-01 23:09:08.1234567’; 选择 FORMAT(@date, ’d’, ’en-us’) AS ‘美国英语’, FORMAT(@date, ’d’, ’en-gb’) AS ‘British’, FORMAT(@date, ’d’, ‘de-de’) AS ‘德语’, FORMAT(@date, ’d’, ‘jp-jp’) AS ‘日语’;

结果:

+————–+————+————+——– —-+ | 美国英语 | 英国 | 德语 | 日语 | |—————+————+————+——– —-| | 2080 年 5 月 1 日 | 2080 年 1 月 5 日 | 01.05.2080 | 2080 年 5 月 1 日 | +————–+————+————+——– —-+

在这个示例中,所有四个国家都使用d标准的日期和时间格式字符串。然而,他们都使用不同的文化论据。这会产生不同的结果以适应每种文化。

受文化影响的不仅仅是_标准格式字符串。_文化也会影响_自定义_格式字符串的结果。这是一个例子:

声明@date datetime2(7); SET @date = ‘2080-05-01 23:09:08.1234567’; 选择 FORMAT(@date, ‘dddd, dd MMMM’, ’en-us’) AS ‘美国英语’, FORMAT(@date, ‘dddd, dd MMMM’, ‘de-de’) AS ‘德语’, FORMAT(@date, ‘dddd, dd MMMM’, ‘vi’) AS ‘越南语’, FORMAT(@date, ‘dddd, dd MMMM’, ‘sv’) AS ‘瑞典语’;

结果:

+——————–+——————+———- ————+—————-+ | 美国英语 | 德语 | 越南语 | 瑞典语 | |——————–+——+———- ————+—————-| | 5 月 1 日,星期三 | Mittwoch, 01 麦 | Thứ Tư, 01 Tháng Năm | 昂斯达格,01 少校 | +——————–+——————+———- ————+—————-+

您还可以选择使用不变的区域性 ( iv)。不变的文化是文化不敏感的。它与英语有关,但与任何国家/地区无关。有关详细信息和示例,请参阅在 SQL Server 中使用 FORMAT() 时如何指定不变文化。