遵循自定义转换器函数,该函数将字符串值(带偏移的完整日期)转换为日期时间,并仅提取日期部分并将提取的日期部分转换为varchar。我知道这是精神上的。但是,这是数据提取和报告(SSRS)的一部分。
ISNULL(CONVERT(varchar(16), CONVERT(datetime,dt, 103), 20), '')
其中dt
是我的列,其中我将“带偏移的完整日期时间”存储为字符串
按预期工作,不包括在一个案例中。即如果dt
没有值或空字符串,则上述函数(CONVERT(datetime,dt, 103), 20)
)的一部分返回一个值1900/01/01
。此1900/01/01
随后转换为字符串。这是罪,我不希望dt值的最终转换值中的任何数据为空。
问题:有人可以帮助我发现上述转换器功能中的问题(如果有的话)。如果没有,谁将成为这里的罪魁祸首,返回1900/01/01。
答案 0 :(得分:8)
将dt
替换为NULLIF(dt, '')
(另外,请停止将日期存储为字符串。请。)
答案 1 :(得分:0)
这有助于您发现问题:
SELECT CONVERT(datetime,'', 103)
返回1900-01-01 00:00:00.000
也许案例结构可以帮助您解决问题。那将是我的方法。
答案 2 :(得分:0)
使用ISDATE()功能。如果您有SQL Server 2012,请使用TRY_CONVERT()功能。这些将抵御所有不良投入,而不仅仅是你事先想到的那些。