Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql server中将varchar列转换为datetime_Sql_Sql Server_Sql Server 2008_Datetime - Fatal编程技术网

在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谢谢您的帮助。但我的问题是如何对表列进行查询。我只想查询包含日期字符串的表列,将其转换为日期时间值并更新同一表的日期时间列中的日期。