sql - CONVERT 显示错误的年份
问题描述
我正在使用 SQL Server 2014,我正在尝试执行数据转换,传递的值是 '04-SEP-44'
因为这是出生年份,所以必须是 1944 年,而不是 2044 年。
我试过了
select convert(DATETIME, '04-SEP-44')
select convert(DATETIME, '04-SEP-44', 1)
select convert(DATETIME, '04-SEP-44', 13)
但他们都使用年份为2044。
是否有任何快速解决此问题的方法?
解决方案
可能性:
- 如果该值大于今天减去 100 年...
- 强制“19”进入字符串......
但这真的取决于您的业务规则,它总是会是 1900 年,还是某些日期可能是 2000 年初?你真的应该更新你的前端来捕捉完整的日期。
select case when Y.[Value] > getdate() then dateadd(year, -100, Y.[Value]) else Y.[Value] end
, convert(date, substring(X.[Value], 1, 7) + '19' + substring(X.[Value], 8, 2))
from (values ('04-SEP-44')) as X ([Value])
cross apply (values (convert(date, X.[Value]))) as Y ([Value]);
注意:为什么要将 a 转换date
为 a datetime
?datetime
如果您没有时间组件,请不要使用 a 。
推荐阅读
- sql - 从表中确定“最长的 X 条纹”(SQL Server 2018)
- c++ - Linux 上的黑屏,但 Windows 上没有
- linux - unixODBC/Postgres 密码神秘登录错误
- ios - 尝试为 cellForRowAtIndexPath 重用计时器
- flask - Bootstrap 3.3.7 - 在另一条路线上运行功能时在按钮中加载 gif
- c# - C#/Theoretical-我如何计算一个事件需要多长时间*在两台计算机之间*
- javafx - 在场景中不显示任何按钮
- python - Python ctypes:ctype数组中元素的类型
- php - 使用 .htaccess 文件隐藏和重命名文件夹
- sql - Avg() 函数在 PostgreSQL 中返回 '0E-20' 而不是 '0'