我有一个表table_a
与列field_b
其中格式是字符串。SQL如何更改例如字符串。 01/06/2012至2012-06-01
在那个领域,它们被写成例如01/06/2012
。
我需要将其更改为2012-06-01
我不能改变字段中键入等
我有一个表table_a
与列field_b
其中格式是字符串。SQL如何更改例如字符串。 01/06/2012至2012-06-01
在那个领域,它们被写成例如01/06/2012
。
我需要将其更改为2012-06-01
我不能改变字段中键入等
大多数SQL引擎有一个子()函数。一起使用与CONCAT()来创建新的字符串:
(伪)
update table_a set field_b=concat(substring(field_b, 6, 4), '-', substring(field_b, 3, 2), '-', substring(field_b, 0, 2))
请参阅您的SQL服务器的手册。
thnx这有帮助,我也想问一个更多的事情,如果我有格式日期yyyy-mm-dd eg.2012-08-10但日和月在worng地方写我如何使2012-10-08格式保持相同的yyyy-mm-dd。 thnx提前。 – Buar 2012-07-16 12:13:47
只需翻转最后两个子字符串()调用: concat(substring(field_b,6,4),' - ',substring(field_b,0,2),' - ',substring(field_b,3,2)) 有关substring()和concat()函数的工作原理,请参阅SQL服务器手册。 – 2012-07-16 12:36:57
select cast(cast('01/06/2012' as DATE) as varchar(10))
'select cast(cast('01/06/2012'as DATETIME)as varchar(10))'returns _“Jun 1 201”_ on SQL-Server 2005(no _Date_ datatype)here here in germany。 – 2012-07-16 09:08:35
没有本地化问题吗?在美国,它将在一月的六号,六月一号的欧洲。 – 2012-07-16 09:08:54
事情是有像thousnads不同日期不是其中之一,我需要改变他们不只是01/06/2012。但所有dd/mm/yyyy到db中的yyyy-mm-dd。 – Buar 2012-07-16 09:11:04
select convert(datetime,'01/06/2012',103)
这是将工作,将避免本地化问题的答案:
select cast(cast(convert(DATETIME, '01/06/2012', 103) as DATE) as NVARCHAR(10))
您需要使用103格式,然后将其转换为日期(切断时间),然后转换它以varchar。
SELECT CONVERT(DATE,CONVERT(DATEtime,'01/06/2012',103))
更多的例子Click here
很好的回答.... upvote – 2012-07-16 09:44:09
update [YourDB].[dbo].[YourTable]
set [YourColumn] = convert(nvarchar(10), convert(datetime,[YourColumn]), 126)
你不应该存储在字符列日期在首位。 – 2012-07-16 09:03:23
在处理日期你应该使用日期数据类型,因为这给你更多的问题,如果你使用字符.. – 2012-07-16 09:04:56
db不是我的我不能在那里chage一个东西。通常它的日期htat存储在那里......但是这次我的工作要求我在该字段中存储日期... – Buar 2012-07-16 09:07:30