sql-server - 将从 SQL Server 日期列而不是 1900-01-01 返回空值的存储过程
问题描述
我正在使用存储过程来检索日期列并在我的 ASP.NET Web 表单中显示结果。结果显示日期列,就1900-01-01
好像数据作为空值插入数据库一样。我需要它显示为空值。
这是我的代码:
SELECT
*,
CASE
WHEN [DateField] = '1900-01-01' OR [DateField] IS NULL
THEN ''
END AS [DateField]
FROM
Table
WHERE
MemberID = @MemberID
该DateField
列应该返回一个空值,但它仍然显示日期 1900-01-01
解决方案
CASE
表达式返回一个值,该值具有返回值的数据类型优先级 ( Data Type Precendence (Transact-SQL) )。在您case
有 2 种数据类型;DateField
其中(我假设)是 adate
和''
,这是 a varchar(1)
。date
具有比 a 更高的数据优先级,varchar
因此''
被隐式转换为 a date
。并且(您可以使用 进行测试SELECT CAST('' AS date);
)因此返回值是1900-01-01
。
我建议不要使用空字符串,而是返回NULL
. 否则,您必须将[DateField]
列转换为varchar
; 这是个坏主意。您可以通过以下方式轻松实现此目的CASE
:
NULLIF([DateField],'19000101')
推荐阅读
- android - 将 jar 文件添加到我的应用程序的多个模块中
- angular - Angular 6 - 扩展面板抛出 ERROR 错误:“[object Object]”
- python - 如何减慢异步 API 调用以匹配 API 限制?
- python - Heroku 无法导入名称“登录”
- ios - 如何在 Alamofire 响应上进行 XCTAssertEqual?
- javascript - React Native 奇怪的 flex 行为
- ios - TestFlight 出口合规性内部测试人员
- javascript - WithRouter 不能在 componentDidUpdate 中工作
- php - call_user_func_array 不执行 __callStatic 魔术方法
- javascript - React ref 嵌套组件