SELECT,使用SQL Server临时操作数据
本文关键字:操作 操作数 数据 Server 使用 SQL SELECT | 更新日期: 2023-09-27 18:04:48
数据库有一个字段"end date"和1753/1/1应该是值代表什么,因为我们不能在SQL Server中给datetime
分配null .
在报表应用程序中使用的选择查询获取包含1753个日期值的数据。好
1753日期导致报表计算出错。报告中有很多计算,更改代码忽略1753会很头疼,所以我在想
是否有办法告诉SQL Server:
SELECT *
FROM TABLE BUT IN END_DATE
WHERE VALUE='1753/1/1 01:00:00.000' REPLACE WITH PARAMETER1
CRUDE EDIT(目前无法访问调试器)
我不记得了,但是我得到了一个错误,像
什么都不应该映射到什么
当我尝试插入记录与空日期!这只在使用vb时发生。NET在c#中工作得很好。你知道为什么吗?
SELECT *
FROM TABLE
WHERE END_DATE =
CASE VALUE
WHEN VALUE = '1753/1/1 01:00:00.000' THEN PARAMETER1
ELSE VALUE
END
编辑:回复评论
您不能将NULL
分配给DateTime
字段,因为DateTime
是一个值类型,因此它不能持久化NULL
。使用SqlDateTime。NULL表示将NULL
值传递给存储过程或查询本身。如果你能提供代码,应该通过NULL
-我可以给你更详细的例子。
虽然我认为null应该用来表示没有值,但您可以尝试:
SELECT MyDate = CASE END_DATE
WHEN '1753/1/1 01:00:00.000' THEN YourDefaultValue
ELSE END_DATE
END
SELECT field1, field2, field3,
'NEW_END_DATE' = CASE CAST(END_DATE AS DATE) = '1753-1-1'
THEN @Parameter
ELSE END_DATE
END
FROM TABLE;
您需要使用大小写
SELECT case when date_field = '1753/1/1 01:00:00.000' then @PARAMETER1
ELSE date_field END
FROM TABLE
我猜你可能正在寻找这样的东西(注意你不能用SELECT *
;您必须显式地选择所需的列,除非您想使用不同的名称添加计算列。
SELECT
CASE
WHEN END_DATE = > '1753/1/1 01:00:00.000' THEN END_DATE
ELSE PARAMETER1
END 'END_DATE',
other_columns...
FROM
TABLE
但实际上,我建议更改您的设计,使用null而不是使用这个奇怪的结束日期。DATETIME列没有什么特别之处可以阻止它们成为NULLable。我曾经做过一个项目,有人用一个愚蠢的"无效"日期值做了类似的事情,这导致了没完没了的问题。