将NVARCHAR转换为英国日期

时间:2019-11-15 14:25:31

标签: sql-server tsql date ssms

我希望将将NVARCHAR转换为英国日期的用户输入

用户输入的最大长度始终为6位数字。

例如:

151119(DDMMYY)-> 15NOV19

120119(DDMMYY)-> 19年1月12日

3 个答案:

答案 0 :(得分:2)

首先需要一个有效的DATEDATETIME / DATETIME2值。您可以使用带有SELECT的{​​{1}}查询来获得该值:

CONVERT

现在,您可以通过两种方法以预期的格式(SELECT CONVERT(DATE, SUBSTRING('151119', 3, 2) + '-' + SUBSTRING('151119', 1, 2) + '-' + SUBSTRING('151119', 5, 2) , 10); )获取日期。

1-使用DATENAME的解决方案:

DDMMMYY

2-使用CONVERT的解决方案:

-- set the date value (from custom date value).
DECLARE @dDateValue AS DATE = CONVERT(DATE, 
  SUBSTRING('150419', 3, 2) + '-'
  + SUBSTRING('150419', 1, 2) + '-'
  + SUBSTRING('150419', 5, 2)
, 10);

-- format the date value to the expected format.
SELECT DATENAME(DD, @dDateValue) + 
  UPPER(LEFT(DATENAME(MM, @dDateValue), 3)) + 
  RIGHT(DATENAME(YY, @dDateValue), 2);

demo on dbfiddle.uk


注意:我建议将日期值存储在数据类型为-- set the date value (from custom date value). DECLARE @dDateValue AS DATE = CONVERT(DATE, SUBSTRING('150419', 3, 2) + '-' + SUBSTRING('150419', 1, 2) + '-' + SUBSTRING('150419', 5, 2) , 10); -- format the date value to the expected format. SELECT UPPER(REPLACE(CONVERT(VARCHAR, @dDateValue, 6), ' ', '')); DATE的列上。您可以在应用程序上格式化日期值,也可以直接在SQL-Server上使用格式化函数。

答案 1 :(得分:2)

您需要将字符串更改为看起来几乎与普通日期格式相似的内容,然后可以使用convert:

declare @textDate nvarchar(6) = '120119';

select @textDate
    , stuff(stuff(@textDate, 3,0,'/'), 6,0,'/')
    , convert(date, stuff(stuff(@textDate, 3,0,'/'), 6,0,'/'), 3);

给予:120119,12 / 01 / 19,2019-01-12 由于最后一个是有效的日期数据类型,因此您现在可以使用Format()

虽然显然2位年份是一个坏主意。

忘了说,3代表英国2位数格式(dd / mm / yy),您可以看到其他选择here

答案 2 :(得分:1)

我强烈建议使用AS DATE或DATETIME类型的列上的日期值。这是您需要的简单实现:

SQL Fiddle

MS SQL Server 2017架构设置

create table test (mydate nvarchar(6))
insert into test (mydate)values('151119')
insert into test (mydate)values('120119')

查询1

select FORMAT(CONVERT(DATE, dates), 'dd/MM/yyyy ')   from (select left(mydate,2)
+ 
CASE  SUBSTRING(mydate, 3, 2)
       WHEN '01' THEN 'JAN'
       WHEN '02' THEN 'FEB'
       WHEN '03' THEN 'MAR'
       WHEN  '04' THEN 'APR'
       WHEN '05' THEN 'MAY'
       WHEN '06' THEN 'JUN'
       WHEN '07' THEN 'JUL'
       WHEN '08' THEN 'AUG'
       WHEN '09' THEN 'SEP'
       WHEN '10' THEN 'OCT'
       WHEN '11' THEN 'NOV'
       WHEN '12' THEN 'DEC'
       ELSE 'error'
END
+ right(mydate,2) AS 'dates'
from test ) AS T

Results

|             |
|-------------|
| 15/11/2019  |
| 12/01/2019  |
相关问题