阳春市文章资讯

SQL Server中将日期类型转字符串的几种常用写法

2026-04-03 07:02:01 浏览次数:1
详细信息

1. 使用 CONVERT() 函数

这是最常用的方法,可以指定格式化样式:

-- 转换为默认格式
SELECT CONVERT(VARCHAR, GETDATE())  -- 默认格式: 'MM dd yyyy hh:mmAM'

-- 指定格式化样式(常用样式)
SELECT CONVERT(VARCHAR, GETDATE(), 120)  -- 'yyyy-mm-dd hh:mi:ss' (24h)
SELECT CONVERT(VARCHAR, GETDATE(), 121)  -- 'yyyy-mm-dd hh:mi:ss.mmm'
SELECT CONVERT(VARCHAR, GETDATE(), 112)  -- 'yyyymmdd' (紧凑格式)
SELECT CONVERT(VARCHAR, GETDATE(), 111)  -- 'yyyy/mm/dd'
SELECT CONVERT(VARCHAR, GETDATE(), 101)  -- 'mm/dd/yyyy'
SELECT CONVERT(VARCHAR, GETDATE(), 103)  -- 'dd/mm/yyyy'
SELECT CONVERT(VARCHAR, GETDATE(), 104)  -- 'dd.mm.yyyy'

2. 使用 CAST() 函数

将日期隐式转换为字符串:

-- 隐式转换,转换为默认格式
SELECT CAST(GETDATE() AS VARCHAR)

-- 指定长度
SELECT CAST(GETDATE() AS VARCHAR(10))  -- 'MM dd yyyy'
SELECT CAST(GETDATE() AS VARCHAR(20))  -- 'MM dd yyyy hh:mmAM'

3. 使用 FORMAT() 函数(SQL Server 2012+)

提供最灵活的格式化选项:

-- 自定义格式化
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss')     -- '2024-01-15 14:30:25'
SELECT FORMAT(GETDATE(), 'yyyy/MM/dd')              -- '2024/01/15'
SELECT FORMAT(GETDATE(), 'dd/MM/yyyy')              -- '15/01/2024'
SELECT FORMAT(GETDATE(), 'MMM dd, yyyy')           -- 'Jan 15, 2024'
SELECT FORMAT(GETDATE(), 'dddd, MMMM dd, yyyy')    -- 'Monday, January 15, 2024'

-- 包含毫秒
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss.fff') -- '2024-01-15 14:30:25.123'

-- 区域设置格式化
SELECT FORMAT(GETDATE(), 'd', 'en-US')  -- '1/15/2024' (美国格式)
SELECT FORMAT(GETDATE(), 'd', 'de-DE')  -- '15.01.2024' (德国格式)
SELECT FORMAT(GETDATE(), 'D', 'zh-CN')  -- '2024年1月15日' (中文格式)

4. 字符串拼接(手动格式化)

使用日期函数提取各部分再拼接:

SELECT 
    CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-' +
    RIGHT('0' + CAST(MONTH(GETDATE()) AS VARCHAR(2)), 2) + '-' +
    RIGHT('0' + CAST(DAY(GETDATE()) AS VARCHAR(2)), 2) AS DateString
-- 结果: '2024-01-15'

5. DATENAME()DATEPART() 组合

获取特定日期部分进行格式化:

SELECT 
    DATENAME(YEAR, GETDATE()) + '-' + 
    RIGHT('0' + DATENAME(MONTH, GETDATE()), 2) + '-' + 
    RIGHT('0' + DATENAME(DAY, GETDATE()), 2)

常用样式代码参考

代码 格式 示例
0/100 默认 'Jan 15 2024 2:30PM'
101 美国 '01/15/2024'
102 ANSI '2024.01.15'
103 英国/法国 '15/01/2024'
104 德国 '15.01.2024'
105 意大利 '15-01-2024'
106 - '15 Jan 2024'
107 - 'Jan 15, 2024'
108 - '14:30:00'
110 美国 '01-15-2024'
111 日本 '2024/01/15'
112 ISO '20240115'
113/13 欧洲默认 '15 Jan 2024 14:30:00:000'
120/20 ODBC规范 '2024-01-15 14:30:00'
121/25 ODBC规范(带毫秒) '2024-01-15 14:30:00.000'

性能建议

CONVERT()FORMAT() 更快 - FORMAT() 功能强大但性能开销较大 生产环境考虑性能时,优先使用 CONVERT() 需要复杂国际化时,使用 FORMAT() 日期范围查询时,不要在列上使用转换函数,会阻止索引使用

示例对比

-- 获取当前日期时间并格式化
DECLARE @Date DATETIME = GETDATE()

SELECT 
    @Date AS OriginalDate,
    CONVERT(VARCHAR, @Date, 120) AS Convert120,  -- 推荐用于通用格式
    FORMAT(@Date, 'yyyy-MM-dd HH:mm:ss') AS FormatCustom,
    CONVERT(VARCHAR(8), @Date, 112) AS Convert112,  -- 仅日期紧凑格式
    CAST(@Date AS VARCHAR(23)) AS CastDefault

选择哪种方法取决于具体需求:格式要求、SQL Server版本、性能考虑和代码可读性。

相关推荐