我意识到还有其他的线程可以解决这个问题,但是我找不到解决我问题的线程。
我有三个文本列,要么包含日期,要么不包含(null),我将文本转换为日期,以便在日期到达Excel后使用日期筛选器。
显然,空值被转换为'1900-01-01‘,但我找不到一种方法将它们显示为空白,即使使用子查询。
这就是我要做的..。
Select top 999999999
OtherFields,
case when Engdate = '19000101' then '' else Engdate end as 'EngDate',
OtherOtherFields
from
(
select
OtherFields,
case
when VAR_AppID = '3' then nullif( CONVERT(date,concat(right([2201],4),
SUBSTRING([2201],4,2), left([2201],2))),null)
else nullif( CONVERT(date,concat(right([3429],4),
SUBSTRING([3429],4,2), left([3429],2))),null) end as 'Engdate',
case when ([2201] is not null and Len([2201]) = 10 ) then
CONVERT(date,concat(right([2201],4), SUBSTRING([2201],4,2), left([2201],2)))
else null end as 'EngagementRec',
OtherOtherFields
from
Tables
)
字段2201和3429是包含'dd/mm/yyyy‘格式日期的文本字段。
我是否应该恢复文本格式以允许“”显示空白--如果是,日期是否仍被确认为日期?
发布于 2018-06-14 02:29:31
我要亲自关闭这个,因为我找不到任何有用的东西。任何case状态、ISNULL()、NULLIF()等组合都会导致NULL或'1900-01-01‘。转换为文本使日期字段在Excel中不可用。
由于数据将进入Excel枢轴表,因此我不迫切需要解决这个问题,因为pivot表将消除空值。
如果我需要在列表中显示数据,...I可能会回到这里。
感谢所有提出建议的人!
发布于 2020-04-20 02:29:44
根据安东尼·格林在[医]正中上的回答,你可以尝试:
ISNULL(CONVERT(varchar, DateTimeColumnName,23),'') as DateTimeColumnName
发布于 2018-06-12 07:16:15
根据Concat函数上的ms帮助(即sql 2012以后而不是2008年),https://learn.microsoft.com/en-us/sql/t-sql/functions/concat-transact-sql?view=sql-server-2017
如果CONCAT接收带有所有空值的参数,它将返回一个类型为varchar(1)的空字符串。
将隐式地将零长度字符串转换为零,从而使您在sql server中获得零日期。您需要先处理空值,然后再尝试转换您所做的方式。也许可以用Try_convert代替。使用try_convert和正确的选项。TRY_CONVERT(日期时间,列与字符串日期,103)
https://stackoverflow.com/questions/50820355
复制