在sql server中将varchar列转换为datetime
我有一个包含以下定义和数据的表 定义:在sql server中将varchar列转换为datetime,sql,sql-server,sql-server-2008,datetime,Sql,Sql Server,Sql Server 2008,Datetime,我有一个包含以下定义和数据的表 定义: CREATE TABLE [dbo].[TestTB] ( [CREATEDATE] [nvarchar](50) NULL ) ON [PRIMARY] 10/9/2014 1/26/2015 2/16/2015 数据: CREATE TABLE [dbo].[TestTB] ( [CREATEDATE] [nvarchar](50) NULL ) ON [PRIMARY] 10/9/2014 1/26/2015
CREATE TABLE [dbo].[TestTB]
(
[CREATEDATE] [nvarchar](50) NULL
) ON [PRIMARY]
10/9/2014
1/26/2015
2/16/2015
数据:
CREATE TABLE [dbo].[TestTB]
(
[CREATEDATE] [nvarchar](50) NULL
) ON [PRIMARY]
10/9/2014
1/26/2015
2/16/2015
运行查询时:
Select
CAST(CREATEDATE AS DATETIME) as CREATEDATE
FROM
[dbo].[TestTB]
这是一个错误:
味精241,第16级,状态1,第1行从字符串转换日期和/或时间时,转换失败 即使在运行之后,上述操作也不起作用
SET DATEFORMAT dmy
但是,下面的查询工作正常
DECLARE @data nvarchar(50)
SET @data = ' 10/9/2014 '
Select CAST(@data as DateTime)
以上查询返回:2014-10-09 00:00:00.000
如何将存储在列中的日期字符串(mm/dd/yyyy格式)转换为日期时间
DECLARE @data nvarchar(50)
SET @data = ' 10/9/2014 '
SELECT CONVERT(datetime, @data, 101)
SELECT CONVERT(datetime, CREATEDATE, 101) as CREATEDATE
FROM [dbo].[TestTB]
请首先检查此项,如果您的表列是“DateTime”类型,则无论您是否将其转换为日期,它都将以此格式“2014-10-09 00:00:00.000”保存数据。但如果不是这样,并且您有SQL Server 2008版或更高版本,则可以使用此
DECLARE @data nvarchar(50)
SET @data = '10/9/2014'
IF(ISDATE(@data)>0)
BEGIN
SELECT CONVERT(DATE, @data)
END
否则
DECLARE @data nvarchar(50)
SET @data = '10/9/2014'
IF(ISDATE(@data)>0)
BEGIN
SELECT CONVERT(DATETIME, @data)
END
插入表格
插入到dbo.YourTable中
从中选择CREATEDATE
(
挑选
(当(ISDATE(@data)>0)然后转换(DATE,CREATEDATE)时的情况)
否则将(日期'01/01/1900')转换为CREATEDATE
从…起
[dbo].[TestTB]
)临时工
哪里
CREATEDATE转换(日期'01/01/1900')
试试这个:
SELECT IIF(ISDATE(CREATEDATE) = 1, CONVERT(DATETIME, CREATEDATE, 110), CREATEDATE) as DT_CreateDate
FROM [dbo].[TestTB]
nvarchar到datetime是一种隐式转换,这意味着您可以执行以下操作:
declare @strDate nvarchar(50), @myDate datetime
set @strDate = '01/26/2013'
set @myDate = @strDate
但您的问题是日期格式,因此您必须转换它,但您必须指定格式或样式,并且您使用的样式代码是101(根据),因此安全的方法是:
declare @strDate nvarchar(50), @myDate datetime
set @strDate = '01/26/2013'
set @myDate = CONVERT(DATETIME, @strDate, 101)
您可以跳过代码,但使用不同的配置(服务器),代码将中断。
如果使用ISO样式(yyyymmdd),则无需担心,转换将是隐式的:
declare @strDate nvarchar(50), @myDate datetime
set @strDate = '20150421' --ISO style (yyyymmdd)
set @myDate = @strDate
使用
convert()
:。为什么要将它们存储为varchar?不要这样做。@GordonLinoff,尝试从[dbo].[TestTB]中选择转换(DATETIME,CREATEDATE,110)。同样的错误。@TimSchmelter,继承了一项遗产DB@user2520246:所以不可能更改它?你将来会节省很多时间,所以我会拿零钱。使用正确的数据类型,您的查询也会更加高效,并且不会遇到本地化问题。是的,正如我在问题中提到的那样,这是有效的。当日期字符串存储在varchar列中时,如何进行转换?感谢您的帮助。但是,从[dbo]中选择CONVERT(datetime,CREATEDATE,103)作为CREATEDATE。[TestTB]重新运行相同的错误。问题103出现在dd/mm/yyyy上,但您的数据是mm/dd/yyy格式。101是正确的。现在检查@user2520246谢谢您的帮助。但我的问题是如何对表列进行查询。我只想查询包含日期字符串的表列,将其转换为日期时间值并更新同一表的日期时间列中的日期。