使用 CAST 转换 SQL Server 中的数据类型

问题描述 投票:0回答:1

我是 SQL Server 新手,我想知道如何转换 SQL Server 中的数据类型。据我所知 SQL Server 不支持格式掩码(例如“YYYY-MM-DD”或“999”)。它基本上涉及所有数据类型,而不仅仅是如下所示的

DATE
数据类型。

假设我想将“20240512”转换为 2024-12-05,而不是默认值:2024-05-12。

在 Oracle 中,我可以使用 TO_DATE 和 CAST - 这两个函数都支持掩码。

SELECT 
    TO_DATE('20240512')      AS wrong1,
    CAST('20240512' AS DATE) AS wrong2,
    TO_DATE('20240512', 'YYYYDDMM') AS correct1,
    CAST('20240512' AS DATE, 'YYYYDDMM') AS correct2;

在 Postgres 中我可以使用

TO_DATE
。 CAST 不支持格式掩码。

那么,当

TO_DATE
不存在并且
CAST
不支持格式掩码时,SQL Server 会怎样?

sql sql-server casting
1个回答
0
投票

总结评论作为答案:

YYYYMMDD
是一种非常具体的格式,用于避免本地化问题。与 ISO8601 形式相同,
YYYY-MM-DD
。 - panagiotis-卡纳沃斯

在 TSQL 中,您可以使用 ANSI-SQL 标准

CAST
,或更灵活的
CONVERT
- CAST 和 CONVERT (Transact-SQL)。 CONVERT 在转换为字符串时接受样式参数:
SELECT CONVERT(VARCHAR(8), GETDATE(), 112)
。值得指出的是,格式化日期确实会使其成为字符串,因为
DATE
没有格式。 – 帕特里克·赫斯特

看起来OP需要

yyyyddmm
,这不是可用的样式。所以也许可以使用
FORMAT
。 – 查理脸

您也无法将

12345678
转换为日期。在您指定要查找数据库来执行 ETL 清理的情况下,这实际上并不是它的工作。如果您确实想将 'YYYYDDMM' 转换为
DATE
,您应该解析输入以便能够以标准顺序提供它,但这是可能的:
SELECT '20233011', TRY_CAST('20230311' AS DATE), CAST(LEFT('20230311',4)+RIGHT('20230311',2)+SUBSTRING('20230311',5,2) AS DATE) 
帕特里克·赫斯特

Sql Server 不支持格式掩码,但使用

CONVERT
PARSE
FORMAT
函数。但你所要求的转换本质上是......邪恶的。它会让每个开发人员甚至你自己感到困惑。到下个月,如果不是下周一,您将不会记得您使用的是自定义格式,而不是随处可见的标准格式。您将把 20240104 转换为 4 月 1 日。 – 帕纳吉奥蒂斯-卡纳沃斯

© www.soinside.com 2019 - 2024. All rights reserved.