gpt4 book ai didi

sql-server - 为什么从 DATE 到 VARCHAR 的转换是不确定的?

转载 作者:行者123 更新时间:2023-12-03 07:02:36 24 4
gpt4 key购买 nike

在尝试向 SQL Server 表添加计算列时,我发现将 DATE 类型的列直接转换为 VARCHAR 被认为是不确定的。但是,如果我取出日期的各个部分并单独转换它们,那么一切都很好。我想不出合理的解释为什么直接从 DATE 到 VARCHAR 的转换是不确定的。有谁解释一下吗?

例如。

create table [dbo].[junk_CCtest]
(
PatientId bigint identity not null,
EmployerId varchar(6) default 'F*Corp',
EffDate date default getdate()
)
go
-- This works fine.
alter table dbo.junk_CCtest
add Checksum1 as (hashbytes('sha2_256', EmployerId + '/' + cast(PatientId as varchar(10)) + cast(year(EffDate) as varchar(4)) + cast(month(EffDate) as varchar(2)) + cast(day(EffDate) as varchar(2)))) persisted;
go
-- This results in: "Computed column 'Checksum3' in table 'junk_CCtest' cannot be persisted because the column is non-deterministic."
alter table dbo.junk_CCtest
add Checksum3 as (hashbytes('sha2_256', EmployerId + '/' + cast(PatientId as varchar(10)) + cast(EffDate as varchar(10)))) persisted;
go

谢谢

伊恩

最佳答案

日期的字符串 (varchar) 表示形式取决于您的“区域设置”设置(例如,英国日期的表示方式通常与美国不同)。

在上面的示例中,第一个 CAST() 显式指定 varchar 的格式,但第二个 CAST() 强制数据库检查其区域设置以确定如何格式化 varchar 结果。

转换依赖于 CAST() 函数外部的东西这一简单事实使其具有不确定性。

换句话说,您使用一种区域设置运行 CAST(),更改区域设置,然后再次运行 SAME CAST(),您会得到不同的结果。这是非确定性行为的定义。

关于sql-server - 为什么从 DATE 到 VARCHAR 的转换是不确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com