更新sqlserver中的日期格式并将两个字段合并为一个字段

更新sqlserver中的日期格式并将两个字段合并为一个字段,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我收到了一个朋友的日期,但我需要将其更改为符合我的表结构的行 收到的数据 我的桌子 问题是我如何将新数据转换成我的数据 我尝试了下面的查询,我得到了这个错误消息 SELECT surname+' '+INITIALS as 'Surname & Initial' ,CONVERT(VARCHAR(20), CONVERT(DATETIME, STUFF(Date_of_Birth, CHARINDEX(':', Date_of_Birth), 1, ' '), 100),

我收到了一个朋友的日期,但我需要将其更改为符合我的表结构的行

收到的数据

我的桌子

问题是我如何将新数据转换成我的数据

我尝试了下面的查询,我得到了这个错误消息

SELECT
    surname+' '+INITIALS as 'Surname & Initial'
    ,CONVERT(VARCHAR(20), CONVERT(DATETIME, STUFF(Date_of_Birth, CHARINDEX(':', Date_of_Birth), 1, ' '), 100), 103) AS Date_of_Birth
    ,Accno
FROM BackScanning
Msg 242,16级,状态3,第1行varchar数据的转换 类型转换为日期时间数据类型导致值超出范围


我想这就是你想要的

SELECT 'Halute' + ' AD' AS Surname_Initial, 
        CONVERT(VARCHAR(20), CONVERT(DATETIME, '01Apr1978 00:00:00',100), 103) AS Date_of_Birth,
        '111111111' AS Accno
上面的查询提供单个记录。要从表中进行选择,应如下所示-

SELECT
    Surname_Initial
    ,CONVERT(VARCHAR(20), CONVERT(DATETIME, STUFF(Date_of_Birth, CHARINDEX(':', Date_of_Birth), 1, ' '), 100), 103) AS Date_of_Birth
    ,Accno
FROM YourTable

我想这就是你想要的

SELECT 'Halute' + ' AD' AS Surname_Initial, 
        CONVERT(VARCHAR(20), CONVERT(DATETIME, '01Apr1978 00:00:00',100), 103) AS Date_of_Birth,
        '111111111' AS Accno
上面的查询提供单个记录。要从表中进行选择,应如下所示-

SELECT
    Surname_Initial
    ,CONVERT(VARCHAR(20), CONVERT(DATETIME, STUFF(Date_of_Birth, CHARINDEX(':', Date_of_Birth), 1, ' '), 100), 103) AS Date_of_Birth
    ,Accno
FROM YourTable
创建表temp col01 varchar50,dob日期

我使用子字符串作为您的示例是'01Apr1978:00:00:0'

创建表temp col01 varchar50,dob date



我使用了子字符串,因为您的示例是“01Apr1978:00:00:0”

如果您可以将表的DDL放在我的表中,那就太好了。此外,收到的数据是csv、xls或其他格式?收到的数据的DDL都是Varchar50,我的表格如下:姓氏和首字母Nvarchar50,出生日期Nvarchar10,Accno Nvarchar 101。不要使用评论来添加详细信息,而是编辑您的问题。2.始终使用正确的数据类型-切勿将日期值保存为char、varchar等。请使用日期数据类型。您好@ZoharPeled,谢谢您注意到,这两个表都是继承的:-如果你能把你桌子的DDL放在我的桌子上那就太好了。此外,收到的数据是csv、xls或其他格式?收到的数据的DDL都是Varchar50,我的表格如下:姓氏和首字母Nvarchar50,出生日期Nvarchar10,Accno Nvarchar 101。不要使用评论来添加详细信息,而是编辑您的问题。2.始终使用正确的数据类型-切勿将日期值保存为char、varchar等。请使用日期数据类型。您好@ZoharPeled,谢谢您注意到,这两个表都是继承的:-你好@Krishnraj Rana,我有大约900万条记录需要更新?@user3309798:你有没有试着用实际的列名来查询我的查询?我有,它只给了我以下的姓氏,姓首字母,01/04/20161111111records@user3309798:这是因为我添加了您提供的静态值。只需像这样添加您的实际列名-选择姓氏首字母、CONVERTVARCHAR20、CONVERTDATETIME、STUFFDate\u出生日期、CHARINDEX':',Date\u出生日期、1',100和103作为日期\u出生日期,Accno FromYourTable@user3309798:发生这种类型的错误是因为“出生日期”列中的某些记录包含无效的exa日期。1985年4月31日。四月从来没有31号,对吧。所以要得到这个无效的日期,只需使用如下的top子句执行select查询-select top 100 accno。。。从你的_table.Hi@Krishnaj Rana,我有大约900万条记录需要更新?@user3309798:你是否尝试过我的查询,输入实际的列名?我尝试过了,它只给了我以下姓氏首字母,01/04/20161111111records@user3309798:这是因为我添加了您提供的静态值。只需像这样添加您的实际列名-选择姓氏首字母、CONVERTVARCHAR20、CONVERTDATETIME、STUFFDate\u出生日期、CHARINDEX':',Date\u出生日期、1',100和103作为日期\u出生日期,Accno FromYourTable@user3309798:发生这种类型的错误是因为“出生日期”列中的某些记录包含无效的exa日期。1985年4月31日。四月从来没有31号,对吧。所以要得到这个无效的日期,只需使用如下的top子句执行select查询-select top 100 accno。。。从你的桌子上。
with cte as (
SELECT 'AD' AS INITIAL
        ,'Halute' as SURNAME
        ,'01Apr1978:00:00:0' as date_of_birth
)
insert into #temp (col01, dob)
select surname+' '+initial as 'Surname & Initial'
    ,CONVERT(date,substring(date_of_birth,1,9))
    --,date_of_birth
from   cte