如何在内联函数sql中将varchar转换为date数据类型

时间:2019-03-11 16:53:42

标签: sql-server

create table session12 
(
     id int,
     name varchar(20),
     Dateofbirth varchar(20)
);

insert into session12 
values (1, 'prashanth', '29/06/1995'),
       (2, 'rayala', '27/06/1997'),
       (3, 'rayala1213', '7/9/2000');

create function inline_Getsession()
returns table
as
    return
        select 
            id, name,
            cast(Dateofbirth as date) as DOB 
        from session12;

select * 
from inline_Getsession();

输出:

  

从字符串转换日期和/或时间时转换失败。

3 个答案:

答案 0 :(得分:1)

您可能需要使用CONVERT和样式代码:

CONVERT(date,DateOfBirth,103)

103样式表示英国样式(dd/MM/yyyy)。您可以在CAST and CONVERT (Transact-SQL)文档中找到样式的完整列表。

答案 1 :(得分:1)

尝试一下:

create table session12 (id int,name varchar(20),Dateofbirth varchar(20));`

insert into session12 values(1,'prashanth','29/06/1995');
insert into session12 values(2,'rayala','27/06/1997');
insert into session12 values(3,'rayala1213','7/9/2000');

create function inline_Getsession()
Returns Table
as
Return
select id,name,CONVERT(DATE,Dateofbirth,103) as DOB from session12;

select * from inline_Getsession();

dd/mm/yyyy转换为日期时,您需要提供103的日期格式

答案 2 :(得分:0)

您还可以设置DateFormat to DMY

如果是2012年以后的版本,我建议使用try_convert(date,...)以避免对任何假字符串抛出错误。

示例

Declare @session12 table (id int,name varchar(20),Dateofbirth varchar(20));
insert into @session12 values(1,'prashanth','29/06/1995');
insert into @session12 values(2,'rayala','27/06/1997');
insert into @session12 values(3,'rayala1213','7/9/2000');

Set DateFormat DMY
Select *
      ,AsADate = convert(date,DateOfBirth)
 From  @session12

返回

id  name        Dateofbirth   AsADate
1   prashanth   29/06/1995    1995-06-29
2   rayala      27/06/1997    1997-06-27
3   rayala1213  7/9/2000      2000-09-07