Skip to content

SQL Format() 函数

SQL 数据库系统提供函数来格式化数据的显示方式,例如数字、日期和货币。特定函数及其语法在不同的数据库平台(例如,SQL Server, MySQL, PostgreSQL, Oracle)之间差异很大。

本章将主要讨论在 SQL Server(2012 及更高版本)中实现的 FORMAT() 函数,然后简要提及其他系统中的替代方法。

在 SQL Server(2012 及更新版本)中,FORMAT() 函数用于使用指定的格式字符串和可选的文化设置来格式化值(日期、时间、数字)。

SELECT FORMAT(value, format_string, [culture]) FROM table_name;

参数描述
value必需。要格式化的值(可以是日期/时间、数字)。
format_string必需。一个 .NET Framework 格式字符串(标准或自定义)。对于日期:‘d’, ‘D’, ‘yyyy-MM-dd’。对于数字:‘C’(货币),‘N’(数字),‘P’(百分比)。
culture可选。指定文化的字符串(例如,‘en-US’, ‘de-DE’)。如果省略,则使用当前会话的语言。

我们将使用一个示例 “Products” 表进行演示。

以下是 “Products” 表中的部分数据:

ProductID ProductName SupplierID CategoryID UnitPrice EntryDate

1 Chai 1 1 18.00 2023-01-15

2 Chang 1 1 19.50 2023-02-20

3 Aniseed Syrup 1 2 10.00 2023-03-10

4 Chef Anton’s Cajun Seasoning 2 2 22.35 2023-04-05

5 Chef Anton’s Gumbo Mix 2 2 25.00 2023-05-01

  1. 格式化日期:

以下 SQL 语句选择产品名称,并使用美国英语文化将 EntryDate 格式化为 ‘Month Day, Year’。

-- SQL Server 示例
SELECT ProductName, FORMAT(EntryDate, 'D', 'en-US') AS FormattedEntryDate
FROM Products;

结果可能如下:Chai | January 15, 2023

  1. 将数字格式化为货币:

以下 SQL 语句选择产品名称,并将 UnitPrice 格式化为美元货币。

-- SQL Server 示例
SELECT ProductName, FORMAT(UnitPrice, 'C', 'en-US') AS FormattedPrice
FROM Products;

结果可能如下:Chai | $18.00

  1. 格式化当前日期:
-- SQL Server 示例
SELECT ProductName, UnitPrice, FORMAT(GETDATE(), 'yyyy-MM-dd') AS TodayFormatted
FROM Products;

这将为每个产品添加一列,显示当前日期并格式化为 YYYY-MM-DD。

其他数据库系统中的格式化函数

Section titled “其他数据库系统中的格式化函数”

其他数据库系统有自己的格式化函数:

  • MySQL:
    • DATE_FORMAT(date, format_string) 用于日期(例如,DATE_FORMAT(EntryDate, '%M %d, %Y'))。
    • FORMAT(number, decimal_places) 用于数字(例如,FORMAT(UnitPrice, 2))。
  • PostgreSQL:
    • TO_CHAR(value, format_string) 用于日期和数字(例如,TO_CHAR(EntryDate, 'Month DD, YYYY'),TO_CHAR(UnitPrice, 'L9G999D99') 用于特定于区域设置的货币)。
  • Oracle:
    • TO_CHAR(value, format_string, [nls_params]) 用于日期和数字(与 PostgreSQL 类似,例如,TO_CHAR(EntryDate, 'DD-MON-YYYY'),TO_CHAR(UnitPrice, 'L99G999D99'))。

请务必参考你的数据库系统的具体文档,以了解可用的格式化函数、格式字符串和文化设置。