Sql server 如何在MS SQL中将空日期编码为空
我有列/行值的下表:Sql server 如何在MS SQL中将空日期编码为空,sql-server,Sql Server,我有列/行值的下表: tbl1 ID 1 2 3 tbl2 ID Color DateRegister 1 'Red' '2021-02-04 00:00:00.000' 3 'Blue' '2021-02-04 00:00:00.000' 我试图编写一个SQL代码,通过左连接从tbl1和tbl2中选择记录。如果tbl1和tbl2之间没有连接的记录,则tbl2列应为空。我使用CASE为空值显示空白字符串。这不适用于日期列 SELECT tbl1.ID
tbl1
ID
1
2
3
tbl2
ID Color DateRegister
1 'Red' '2021-02-04 00:00:00.000'
3 'Blue' '2021-02-04 00:00:00.000'
我试图编写一个SQL代码,通过左连接从tbl1和tbl2中选择记录。如果tbl1和tbl2之间没有连接的记录,则tbl2列应为空。我使用CASE为空值显示空白字符串。这不适用于日期列
SELECT
tbl1.ID
, CASE WHEN tbl2.Color IS NULL THEN '' ELSE tbl2.Color END AS 'Batch-Color'
, tbl2.DateRegister as 'Date-1'
, CASE WHEN tbl2.DateRegister IS NULL THEN '' ELSE WHEN tbl2.DateRegister END AS 'Batch-Date'
FROM tbl1 LEFT JOIN tbl2 ON tbl1.ID = tbl2.ID
这是输出。我需要将日期显示为空白字符串,而不是“1900-01-01”
ID Batch-Color Date-1 Batch-Date
1 'Red' '2021-05-28 00:00:00.000' '2021-05-28 00:00:00.000'
2 '' NULL '1900-01-01 00:00:00.000'
3 'Blue' '2021-02-04 00:00:00.000' '2021-02-04 00:00:00.000'
您需要<代码> Case<代码>您的日期到<代码> VARCHAR < /代码>,否则空白字符串将被隐式地转换为<代码>日期<代码>,因此您的1900—01-01. 尝试以下模式:
select... coalesce(convert(varchar(25),[Batch-Date]),'')...
您必须使用style=
121
将DateRegister
转换为VARCHAR
(以保留所需的格式)。另外,使用
COALESCE()
比使用大小写表达式更简单:
请参阅。
最好的方法是简单地保留NULL
值,并让您的客户机代码根据需要对其进行格式化。如果将日期转换为空白,还必须决定使用何种格式来转换非NULL
——依赖服务器基于区域设置隐式生成的日期是个坏主意。完全同意上述评论<代码>'
根据定义不是日期,您不能在SQL中的日期和时间列中存储或解析非日期值;列必须是单个强类型数据类型。将它留给您的表示层,以空白值显示NULL
,而不是RDBMS。使用不带长度的VARCHAR
是一个。@Jeroenmoster是的,我必须计数,最多23个。这对我来说很有效。我得到了我需要的结果。非常感谢。:-)
SELECT tbl1.ID,
COALESCE(tbl2.Color, '') AS [Batch-Color],
tbl2.DateRegister AS [Date-1],
COALESCE(CONVERT(VARCHAR(23), tbl2.DateRegister, 121), '') AS [Batch-Date]
FROM tbl1 LEFT JOIN tbl2
ON tbl1.ID = tbl2.ID