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,使用SQL Server临时操作数据

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。我曾经做过一个项目,有人用一个愚蠢的"无效"日期值做了类似的事情,这导致了没完没了的问题。