在sql server中将字符串转换为日期

在sql server中将字符串转换为日期,sql,sql-server,Sql,Sql Server,如何将YYYY-MM-DD(2012-08-17)转换为SQL Server中的日期 我在帮助页面上没有看到这种格式:我认为样式111(日本)应该适用: SELECT CONVERT(DATETIME, '2012-08-17', 111) 如果出于某种原因,这不起作用-您可以随时去掉破折号,然后使用完全可靠的ISO-8601格式(YYYYMMDD),该格式适用于SQL Server中的任何语言和日期格式设置: SELECT CAST(REPLACE('2012-08-17', '-', ''

如何将
YYYY-MM-DD
2012-08-17
)转换为SQL Server中的日期

我在帮助页面上没有看到这种格式:

我认为样式111(日本)应该适用:

SELECT CONVERT(DATETIME, '2012-08-17', 111)
如果出于某种原因,这不起作用-您可以随时去掉破折号,然后使用完全可靠的ISO-8601格式(
YYYYMMDD
),该格式适用于SQL Server中的任何语言和日期格式设置:

SELECT CAST(REPLACE('2012-08-17', '-', '') AS DATETIME)

这将实现以下目的:

SELECT CONVERT(char(10), GetDate(),126)

若您的数据类型是table.col的datetime,那个么数据库存储数据包含两部分:1(日期)2(时间)

仅在显示数据时使用convert或cast

例如:

create table #test(part varchar(10),lastTime datetime)
go

insert into #test (part ,lastTime )
values('A','2012-11-05 ')

insert into #test (part ,lastTime )
values('B','2012-11-05 10:30')


go

select * from #test 

A   2012-11-05 00:00:00.000
B   2012-11-05 10:30:00.000

select part,CONVERT (varchar,lastTime,111) from #test

A   2012/11/05
B   2012/11/05

select part,CONVERT (varchar(10),lastTime,20) from #test 

A   2012-11-05
B   2012-11-05

我也有类似的情况。下面是我能够在“where”子句(对marc_答案的修改)中获得日期范围的方法:

希望对…有帮助。

写一个函数

CREATE FUNCTION dbo.SAP_TO_DATETIME(@input VARCHAR(14))
RETURNS datetime
AS BEGIN
    DECLARE @ret datetime
    DECLARE @dtStr varchar(19)

    SET @dtStr = substring(@input,1,4) + '-' +  substring(@input,5,2) + '-' + substring(@input,7,2)
                + ' ' + substring(@input,9,2) + ':' + substring(@input,11,2) + ':' + substring(@input,13,2);        

    SET @ret = COALESCE(convert(DATETIME, @dtStr, 20),null);
    RETURN @ret
END

是否无法指定类似“ddmmyyyy”的格式?拥有一个随机数似乎真的很可怕,我认为这是为了相反的方向——从一个日期到一个字符串。
CONVERT
中似乎没有等效样式,仅当从日期或时间转换为字符串时才相关。将日期或时间转换为字符串时,样式是不相关的。但为什么要去掉破折号呢?哪些版本的SQL Server不支持此功能?它在我手头的所有版本上都能很好地工作,无可否认,没有那么多老版本。@SilverbackNet:try
SET-LANGUAGE-derman;选择CAST('2018-06-25'作为日期时间)
您将看到这以一个错误结束-如果您使用不带破折号的
20180625
,它会工作(无论语言/区域设置如何)。第三个参数是什么,它是可选的?@daniele3004返回的格式,您可以在此处看到所有不同的格式:
CREATE FUNCTION dbo.SAP_TO_DATETIME(@input VARCHAR(14))
RETURNS datetime
AS BEGIN
    DECLARE @ret datetime
    DECLARE @dtStr varchar(19)

    SET @dtStr = substring(@input,1,4) + '-' +  substring(@input,5,2) + '-' + substring(@input,7,2)
                + ' ' + substring(@input,9,2) + ':' + substring(@input,11,2) + ':' + substring(@input,13,2);        

    SET @ret = COALESCE(convert(DATETIME, @dtStr, 20),null);
    RETURN @ret
END