将nvarchar(50)转换为datetime(更新表后不会出现第二部分)

时间:2013-08-29 08:26:00

标签: sql-server tsql datetime

我还想将我的nvarchar(50)时间码转换为datetime类型。我的代码就是这个:(例如时间27.03.2013 17:11:27)

UPDATE test
set mytime = CONVERT(nvarchar(50), convert(datetime, mytime, 104))
alter table test
alter column mytime datetime

结果:2013-03-27 17:11:00.000

我总能在没有秒的情况下得到结果!所有秒都重置为零。

我想将我的dd.mm.yyyy hh:mm:ss转换为日期时间为秒!

此转换的视图看起来不错,但在我更新表格后却没有!

select mytime, convert(datetime, mytime, 104)
from test

结果:2013年3月27日17:11:27 2013-03-27 17:11:27.000

我做错了什么?

2 个答案:

答案 0 :(得分:1)

<强> Here is SQL Fiddel Demo

您可以尝试以下步骤

CREATE TABLE test
    ([mytime] varchar(50))
;

INSERT INTO test
    ([mytime])
VALUES
    ('27.03.2013 17:11:27')
;

Alter Table test
add mytimeTemp datetime;


set dateformat dmy;

update test
set mytimeTemp = mytime;

update test
set mytimeTemp = '';

alter table test
alter column mytime datetime;

alter table test
drop column mytimetemp;

答案 1 :(得分:0)

因为你使用的是104,所以改为其他风格,如109或113.

如果没有适合您的样式格式。您可以编写一个函数来自定义它,如下所示

CREATE FUNCTION [dbo].[fnGeneral_FormatDateString] (
    @dtDate     DATETIME,
    @iFormat    VARCHAR(20)
)
RETURNS VARCHAR(64) 
AS
BEGIN
    DECLARE @dtDateVC VARCHAR(64) 

    SELECT @dtDateVC = CASE @iFormat 
    WHEN 'DD MMM YYYY' THEN RIGHT('0' + CAST(DAY(@dtDate) AS VARCHAR),2) +  + SPACE(1) + LEFT(DATENAME(MONTH, CONVERT(DATETIME, @dtDate, 120)),3)  + SPACE(1) + CAST(YEAR(@dtDate) AS VARCHAR) 

    WHEN 'YYYY-MM-DD HH:MM 24' THEN CONVERT(CHAR(10), @dtDate, 23) + ' ' +  CONVERT(CHAR(8), @dtDate, 8) --1.2.0.00

    ELSE  
        'Invalid format specified' 
    END 
    RETURN @dtDateVC 
END