跳至主要内容

FORMAT() SQL 函数

FORMAT() 是 SQL 中最常用的函数之一。通过本教程了解其主要用法。
· 3分钟 阅读

使用 AI 探索

数据库的原始输出很少能直接用于报告。价格会以 1234.5 的形式返回,而不是 $1,234.50。日期会显示为 2023-02-01 04:05:06,而您可能希望更易读一些。 

SQL 的 FORMAT() 函数就很有用。它通过将数字和日期转换为格式化文本来工作,并且对不同货币或某些自定义模式提供了不错的支持。

本教程将介绍其语法和四个常见用例。

什么是 FORMAT() 函数?

FORMAT() 将数字或日期时间转换为文本,并按规则控制其显示方式。

何时在 SQL 中使用 FORMAT()

FORMAT() 适用于以特定格式显示日期、货币和数值。

SQL FORMAT() 语法

FORMAT(value, format[, culture])

参数

说明

Value

必填参数,指向要格式化的列

Format

必填参数,用于指定值的格式模式。应包含一个 .NET 格式字符串。我们将在下方示例中演示各种允许的格式

Culture

可选参数,用于指定日期/时间的区域感知格式。

FORMAT() 示例

示例 1:格式化数值变量

SELECT
   FORMAT(0112223333, ‘##-###-####') -- replace format with what is shown in the table below.
 

phone_number

0

11-222-3333

示例 2:格式化日期时间

我们可以将日期时间类型的变量格式化为不同的格式。

DECLARE @d DATETIME = CAST('2023-02-01 04:05:06' AS DATETIME);  

SELECT
   FORMAT(@d, format) -- replace format with what is shown in the table below.

Format

Query

2023 年 2 月 1 日 04:05:06 AM 的格式化示例

d

FORMAT(@d, ‘d')

2/1/2023

D

FORMAT(@d, D)

Wednesday, February 1, 2023

f

FORMAT(@d, ‘f')

Wednesday, February 1, 2023 4:05 AM

F

FORMAT(@d, ‘F')

Wednesday, February 1, 2023 4:05:06 AM

g

FORMAT(@d, ‘g')

10/8/2022 6:01 AM

G

FORMAT(@d, ‘G')

10/8/2022 6:01:06 AM

O

FORMAT(@d, ‘O')

2022-10-08T06:01:06.117Z

r

FORMAT(@d, ‘r')

Wed, 01 Feb 2023 04:05:06 GMT

R

FORMAT(@d, ‘R')

Wed, 01 Feb 2023 04:05:06 GMT

s

FORMAT(@d, ‘s')

2023-02-01T04:05:06

u

FORMAT(@d, ‘u')

2023-02-01 04:05:06Z

U

FORMAT(@d, ‘U')

Wednesday, February 1, 2023 4:05:06 AM

t

FORMAT(@d, ‘t')

4:05 AM

T

FORMAT(@d, ‘T')

4:05:06 AM

Y

FORMAT(@d, ‘Y')

February 2023

MM_dd_yyyy

FORMAT(@d, ‘MM_dd_yyyy')

02_01_2023

MMM-dd-yy

FORMAT(@d,'MMM-dd-yy')

Feb 01 23

yyyy-dd-MM

FORMAT(@d,'yyyy-dd-MM')

2023-01-02

yyyy-dd-MM hh.mm

FORMAT(@d,'yyyy-dd-MM hh.mm')

2023-01-02 04.05

yyyy-dd-MM hh.mm.ss

FORMAT(@d,'yyyy-dd-MM hh.mm.ss')

2023-01-02 04.05.06

yyyy-dd-MM hh.mm.ss tt

FORMAT(@d,'yyyy-dd-MM hh.mm.ss tt')

2023-01-02 04.05.06 AM

示例 3:格式化具备区域感知的日期

我们可以使用 culture 参数将日期格式化为不同语言。

DECLARE @d DATE = CAST('2023-02-01' AS DATE);  

SELECT
   FORMAT(@d, format, culture) -- replace format with what is shown in the table below.

Culture

Query

2023 年 2 月 1 日的格式化示例 

美国英语(en-US)

FORMAT(@d, 'd', 'en-US') 

2/1/2023

FORMAT(@d, 'f', 'en-US') 

Wednesday, February 1, 2023 12:00 AM

英国英语(en-gb)

FORMAT(@d, 'd', 'en-gb')

01/02/2023

FORMAT(@d, 'f', 'en-gb')

01 February 2023 00:00

德语(de-de)

FORMAT(@d, 'd', 'de-de') 

01.02.2023

FORMAT(@d, 'f', 'de-de') 

Mittwoch, 1. Februar 2023 00:00

中文(zh-cn)

FORMAT(@d, 'd', 'zh-cn')

2023/2/1

FORMAT(@d, 'f', 'zh-cn')

2023年2月1日 0:00

印地语(hi-in)

FORMAT(@d, 'd', ‘hi-in')

01-02-0203

FORMAT(@d, 'f', ‘hi-in')

01 फरवरी 2023 00:00

俄语(ru-ru)

FORMAT(@d, 'd', ru-ru') 

01-02-2023

FORMAT(@d, 'f', ru-ru') 

1 февраля 2023 г. 0:00

西班牙(gl-es)

FORMAT(@d, 'd', 'gl-es')

01/02/2023

FORMAT(@d, 'f', 'gl-es')

mércores 01 febreiro 2023 00:00

示例 4:格式化货币

我们也可以方便地将数值格式化为各类货币。

SELECT
   FORMAT(amount, 'c', culture) -- replace format with what is shown in the table below.

Culture

Query

格式化货币示例

美国英语(en-US)

SELECT 

   FORMAT(5.5, 'c', 'en-US') 

$5.5

英国英语(en-gb)

SELECT 

   FORMAT(@d, 'c', 'en-gb')

£5.5

德语(de-de)

SELECT 

   FORMAT(@d, 'c', 'de-de') 

5,50 €

中文(zh-cn)

SELECT 

   FORMAT(@d, 'c', 'zh-cn')

¥5.50

印地语(hi-in)

SELECT 

   FORMAT(@d, 'c', ‘hi-in')

₹5.50

俄语(ru-ru)

SELECT 

   FORMAT(@d, 'c', ru-ru') 

5,50 ₽

西班牙(gl-es)

SELECT 

   FORMAT(@d, 'c', 'gl-es')

€5,50

技术要求

FORMAT() 可在 SQL Server(自 2012 起)和 Azure SQL Database 中使用。FORMAT() 也可在 PostgreSQL 中使用,但其行为不同。您可以在这门课程中了解更多。

另请参阅

进一步学习 SQL

结论

FORMAT() 值得学习,因为它能将 SQL 中一个常见的麻烦问题,变成一行即可解决。

但需要注意:这里展示的是 SQL Server 和 Azure SQL 的语法。PostgreSQL 也有自己的 FORMAT() 函数,但行为不同——在依赖这些模式之前,请先确认您的方言。

主题