将多列转换为datetime

时间:2015-02-20 09:11:57

标签: sql-server

如何在MsSQL中将多字列转换为日期时间?

我有3列全部采用varchar数据类型。月份列包含月份的全名(1月)。 这是我的桌子。

date  month      Year
01    January    2013
02    February   2014
03    March      2015

4 个答案:

答案 0 :(得分:0)

试试这个:

如果您保存了varchar类型的所有字段

SELECT convert(datetime, date + ' ' + substring(month, 1, 3) + ' ' + year, 106)
from yourtable

如果日期和年份是int,您可以写:

SELECT convert(datetime, convert(varchar, date) + ' ' +
substring(month, 1, 3) + ' ' + convert(varchar, year), 106)
from yourtable

有关详细信息,请参阅here

答案 1 :(得分:0)

使用Concat所有列并使用Convert函数转换为日期。试试这个。

select convert(date,[date]+' '+[month]+' '+[year])
from yourtable

或者如果您使用sql server 2012+使用DATEFROMPARTS功能

select DATEFROMPARTS('2013',
                      case [month] when 'January' then 1 
                              when 'Feb' then 2 
                              ....,
                      ,'01')

答案 2 :(得分:0)

Declare 
@an varchar(100) = '01',
@luna varchar(100) = 'January',
@zi varchar(100) = '2013'


SELECT CONVERT(datetime,@zi+' '+SUBSTRING(@luna,1,3)+' '+@an,106)

106格式是DD-MMM-YYYY。如果你是肯定的,所有月份的值都是英文的。

见这个例子:

print CONVERT(VARCHAR(11),GETDATE(),106)

答案 3 :(得分:0)

您可以简单地连接值并将varchar值转换为如下日期:

SQL Fiddle Demo

MS SQL Server 2012架构设置

CREATE TABLE DateTable
    ([date] varchar(2), [month] varchar(8), [Year] varchar(4))
;

INSERT INTO DateTable
    ([date], [month], [Year])
VALUES
    ('01', 'January', '2013'),
    ('02', 'February', '2014'),
    ('03', 'March', '2015')
;

查询以连接和转换值

SELECT CONVERT(DATE, d.[date] + d.[month] + d.[year]) AS FormattedDate 
FROM DateTable d

<强> Results

| FormattedDate |
|---------------|
| 2013-01-01    |
| 2014-02-02    |
| 2015-03-03    |