【发布时间】:2023-03-27 05:14:01
【问题描述】:
我已经阅读了几篇关于从 dd/mm/yyyy 转换为 yyyy-mm-dd 的帖子,但代码不起作用(转换和转换)。请参阅下面的示例,如果您能提供帮助,请告知我遇到的错误是“从字符串转换日期和/或时间时转换失败”。如果我将 date_engaged 更改为“2010-09-12”,它将起作用,但我需要以某种方式对其进行转换,因为如果我说选择 getdate(),它会输出这种日期格式 (yyyy-mm-dd)。
这很有趣,因为代码在我的工作 PC 上不适合我,我使用的是 Microsoft SQL Server Management Studio 2008,但在家里,它工作得很好。
create table test(
name varchar (10),
date_engaged nvarchar (20),
timestamp2 nvarchar (20),
LOS nvarchar (20)
)
insert into test (name,date_engaged) values ('JJ','12/09/2010')
update test
set timestamp2=CAST(DATEADD(month,0,dateadd(month,datediff(month,0,getdate()),-1)) AS DATE)
update test
set LOS=DATEDIFF(day,date_engaged,timestamp2)/365.25
谢谢
【问题讨论】:
-
是否有无法在应用程序级别进行转换的原因?
-
因为你没有说明日期格式。并且每台计算机可能有不同的版本或设置来进行隐式数据类型转换。为什么不使用日期数据类型作为日期?
-
正如其他人之前评论过的:使用 DATE 类型来存储日期。如果无法更改基础数据类型:首先将 VARCHAR 转换为 DATE,然后将 DATE 转换回具有适当格式的 VARCHAR。此链接显示options for CONVERT。
-
嗨,我期待这个回复。 :) 好的,但是即使我将 date_engaged 的日期和 timestamp2 的日期放在一起,它仍然不起作用,因为当您说插入测试值时('12/09/2010' 不是它想要的格式。所以这是我的问题。
-
@user3497385 那是因为您仍然使用字符串,格式也很模糊。最好的选择是使用参数化查询并将来自客户端的日期作为日期参数传递。或者使用
20100912之类的明确格式来存储 2010 年 9 月 12 日或 ISO 8601 日期时间格式。甚至2010-09-12对于仅限日期的文字也不是明确的。
标签: tsql sql-server-2008-r2 type-conversion