SELECT,使用 SQL Server 临时操作数据
Posted
技术标签:
【中文标题】SELECT,使用 SQL Server 临时操作数据【英文标题】:SELECT, manipulate data temporary using SQL Server 【发布时间】:2011-08-09 08:30:08 【问题描述】:数据库有一个“结束日期”字段,1753/1/1 应该是什么都不代表的值,因为我们不能在 SQL Server 中将 null 分配给 datetime
..
在报告应用程序中使用的选择查询,获取包括那些 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(目前无权访问调试器)
我不记得了,但我收到了类似
的错误什么都不应该映射到某物上
当我尝试插入具有空日期的记录时!仅当在 C# 中使用 VB.NET 时才会发生这种情况,它工作正常。你知道为什么吗??
【问题讨论】:
顺便说一句,为什么不能将 null 分配给 SQL Server 中的日期时间? 我不记得了,但是当我插入带有空日期的记录时,我得到并错误地说什么都不应该映射到某些东西上!仅当在 csharp 中使用 VB.NET 时才会发生这种情况,它工作正常。你知道为什么吗?? 发布您的代码在保存 null 时会引发错误,可能是因为 DateTIme 是值类型,所以您不能分配 NULL,所以您必须将 SqlDateTime() 对象保存到 dateTime 列中跨度> 就是这样,我会模拟问题并尽快发布 您是否也在过滤“开始日期”? 【参考方案1】:SELECT *
FROM TABLE
WHERE END_DATE =
CASE VALUE
WHEN VALUE = '1753/1/1 01:00:00.000' THEN PARAMETER1
ELSE VALUE
END
编辑:对 cmets 的回答
您不能将NULL
分配给DateTime
字段,因为DateTime
是一种值类型,因此它不能持久化NULL
。使用SqlDateTime.NULL 将NULL
值传递给存储过程或查询自身。
如果你能提供应该通过NULL
的代码 - 我可以给你更详细的例子。
【讨论】:
【参考方案2】:虽然我觉得应该用null来表示某事没有值,你可以试试:
SELECT MyDate = CASE END_DATE
WHEN '1753/1/1 01:00:00.000' THEN YourDefaultValue
ELSE END_DATE
END
详情请见msdn。
【讨论】:
【参考方案3】: SELECT field1, field2, field3,
'NEW_END_DATE' = CASE CAST(END_DATE AS DATE) = '1753-1-1'
THEN @Parameter
ELSE END_DATE
END
FROM TABLE;
【讨论】:
【参考方案4】:你需要用一个案例
SELECT case when date_field = '1753/1/1 01:00:00.000' then @PARAMETER1
ELSE date_field END
FROM TABLE
【讨论】:
【参考方案5】:我猜您可能正在寻找类似的东西(请注意,您不能使用 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。我曾经参与过一个项目,有人用愚蠢的“无效”日期值做了类似的事情,但它导致了无穷无尽的问题。
【讨论】:
这种情况只有在使用 vb.net 时才会发生!知道为什么。 嗯,听起来@sll 可以解决这个问题,所以我会听从这个建议并改用NULL。它可能会让你的生活更轻松。以上是关于SELECT,使用 SQL Server 临时操作数据的主要内容,如果未能解决你的问题,请参考以下文章