我有一个表CUSTOMERS(ID,NAME,REGISTRATION_DT)。它具有以下值 -
1,Alex,093013
2,彼得,012512
3,玛丽,041911
。
。
我希望能够选择REGISTRATION_DT列,并将值重新设置为DATETIME。是否有任何查询将REGISTRATION_DT列中的现有varchar数据类型转换为datetime并且所有值都采用datetime格式?现有的varchar值采用ddmmyy格式。
我正在使用sql-server 2008
答案 0 :(得分:1)
以下示例要求年份始终为2000年。您还需要将字符串YourTable更改为要查询的表格。
SELECT
Id
,Name
--Convert To Date Time
,CONVERT(datetime,
-- Add 20 to the final 2 numbers to represent the year i.e 2013
('20' + SUBSTRING(REGISTRATION_DT,5,2)
+ '-' +
-- the first 2 numbers to represent the Month i.e 09
SUBSTRING(REGISTRATION_DT,1,2)
+ '-' +
-- the middle 2 numbers to represent the day i.e 30
SUBSTRING(REGISTRATION_DT,3,2)))
as REGISTRATION_DT
from YourTable
答案 1 :(得分:0)
唯一的方法是将varchar转换为date。尝试像
这样的东西SELECT CONVERT(DATE, LEFT(REGISTRATION_DT, 2) + '/'
+ LEFT(RIGHT(REGISTRATION_DT, 4), 2)
+ '/20' + RIGHT(REGISTRATION_DT, 2))
这里有一个例子SQL FIDDLE。
更重要的是,您必须考虑更改保存表格中REGISTRATION_DT
字段的方式。
答案 2 :(得分:0)
试试这个...
select ID, NAME ,CAST((substring(REGISTRATION_DT,5,6)+
substring(REGISTRATION_DT,1,4)) as datetime)
as Registration_Date from CUSTOMERS