SQL 将字符串转换为日期有效,但从中计算无效
SQL Convert string to Date works, but calculations from it does not
我在处理将 NVarchar 字段转换为日期字段的查询时遇到问题。
我使用了代码 convert(date,answer)
并且它有效,但是当我尝试将 case 语句与此和另一个转换 (convert(date,answer2))
一起使用时,它不起作用。
我试过下面的代码
select
CASE WHEN CP >= REF THEN 1 ELSE 0 END AS CPY
from(
SELECT
convert(date,A.answer) as CP,
convert(date,B.answer) AS REF
from table_a as A
left join table_b as B on A.ID = B.ID
)m
WHERE (CASE WHEN CP >= REF THEN 1 ELSE 0 END) = 0
我试过创建另一个外部查询,只是说 CPY = 0
在哪里,但我得到了同样的错误。
我得到的错误是
'Conversion failed when converting date and/or time from character
string.'
我不确定为什么 convert 可以完美地工作,但是 case when 对答案的陈述是行不通的。
我无法修改数据库中的数据,我们必须使用现有的数据。
感谢任何帮助。
只需使用 try_convert()
即可:
SELECT try_convert(date, A.answer) as CP,
try_convert(date, B.answer) AS REF
您的转换字符串值无效。但是,SQL 服务器不会对查询中的子句进行排序,因此过滤可能不会在转换之前发生。 try_convert()
应该可以解决问题。
见下文 query.Column 名称未被识别,以防您在外部查询中出现。
您必须将其替换为实际转换后的 date.Please,见下文。
select
CASE WHEN CP >= REF THEN 1 ELSE 0 END AS CPY
from(
SELECT
convert(date,A.answer) as CP,
convert(date,B.answer) AS REF
from( table_a as A
left join table_b as B on A.ID = B.ID)
WHERE (CASE WHEN convert(date,A.answer) >= convert(date,B.answer) THEN 1 ELSE 0
END) = 0
请尝试此查询,如果仍然面临 conversion error
,请告诉我。
SELECT CASE
WHEN CP >= REF
THEN 1
ELSE 0
END AS CPY
FROM (
SELECT CAST(A.answer AS DATE) AS CP
,CAST(B.answer AS DATE) AS REF
FROM table_a AS A
LEFT JOIN table_b AS B ON A.ID = B.ID
)
WHERE 0 = CASE
WHEN CP >= REF
THEN 1
ELSE 0
END
您好,感谢所有试图回答我的问题的人。
经过多次尝试失败并请来了一些SQL专家,我们未能找到答案......直到今天!
问题出在数据格式上。答案有两种可能的格式,日期和 date/time,因此这是导致错误发生的原因。
我通过使用子字符串从所有日期中删除时间戳,然后将它们转换为日期来修复它。这似乎工作正常,我们现在有一个运行的报告。 :)
我在处理将 NVarchar 字段转换为日期字段的查询时遇到问题。
我使用了代码 convert(date,answer)
并且它有效,但是当我尝试将 case 语句与此和另一个转换 (convert(date,answer2))
一起使用时,它不起作用。
我试过下面的代码
select
CASE WHEN CP >= REF THEN 1 ELSE 0 END AS CPY
from(
SELECT
convert(date,A.answer) as CP,
convert(date,B.answer) AS REF
from table_a as A
left join table_b as B on A.ID = B.ID
)m
WHERE (CASE WHEN CP >= REF THEN 1 ELSE 0 END) = 0
我试过创建另一个外部查询,只是说 CPY = 0
在哪里,但我得到了同样的错误。
我得到的错误是
'Conversion failed when converting date and/or time from character string.'
我不确定为什么 convert 可以完美地工作,但是 case when 对答案的陈述是行不通的。
我无法修改数据库中的数据,我们必须使用现有的数据。
感谢任何帮助。
只需使用 try_convert()
即可:
SELECT try_convert(date, A.answer) as CP,
try_convert(date, B.answer) AS REF
您的转换字符串值无效。但是,SQL 服务器不会对查询中的子句进行排序,因此过滤可能不会在转换之前发生。 try_convert()
应该可以解决问题。
见下文 query.Column 名称未被识别,以防您在外部查询中出现。
您必须将其替换为实际转换后的 date.Please,见下文。
select
CASE WHEN CP >= REF THEN 1 ELSE 0 END AS CPY
from(
SELECT
convert(date,A.answer) as CP,
convert(date,B.answer) AS REF
from( table_a as A
left join table_b as B on A.ID = B.ID)
WHERE (CASE WHEN convert(date,A.answer) >= convert(date,B.answer) THEN 1 ELSE 0
END) = 0
请尝试此查询,如果仍然面临 conversion error
,请告诉我。
SELECT CASE
WHEN CP >= REF
THEN 1
ELSE 0
END AS CPY
FROM (
SELECT CAST(A.answer AS DATE) AS CP
,CAST(B.answer AS DATE) AS REF
FROM table_a AS A
LEFT JOIN table_b AS B ON A.ID = B.ID
)
WHERE 0 = CASE
WHEN CP >= REF
THEN 1
ELSE 0
END
您好,感谢所有试图回答我的问题的人。
经过多次尝试失败并请来了一些SQL专家,我们未能找到答案......直到今天!
问题出在数据格式上。答案有两种可能的格式,日期和 date/time,因此这是导致错误发生的原因。
我通过使用子字符串从所有日期中删除时间戳,然后将它们转换为日期来修复它。这似乎工作正常,我们现在有一个运行的报告。 :)