将NVARCHAR转换为英国日期



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

用户的输入将始终是最多6位数字。

例如:

151119(年月日(-->2019年11月15日

120119(DDMMYY(-->2019年1月12日

您首先需要一个有效的DATEDATETIME/DATETIME2值。您可以使用带有CONVERT:的SELECT查询来获得此值

SELECT CONVERT(DATE, 
SUBSTRING('151119', 3, 2) + '-'
+ SUBSTRING('151119', 1, 2) + '-'
+ SUBSTRING('151119', 5, 2)
, 10);

现在,您有两种可能获得预期格式(DDMMMYY(的日期。

1-使用DATENAME的解决方案:

-- 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);

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 UPPER(REPLACE(CONVERT(VARCHAR, @dDateValue, 6), ' ', ''));

dbfiddle.uk上的演示


注意:我建议将日期值存储在具有DATEDATETIME数据类型的列上。您可以在应用程序上格式化日期值,也可以直接使用SQL Server上的格式化函数。

您需要将字符串更改为看起来甚至有点像普通日期格式的格式,然后可以使用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/192019-01-12由于最后一个是有效的日期数据类型,现在可以使用Format()

尽管2位数的年份显然是个坏主意。

忘了说,3是英国2位数格式(dd/mm/yy(,你可以在这里看到其他选择。

我强烈建议使用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

结果

|             |
|-------------|
| 15/11/2019  |
| 12/01/2019  |

相关内容

  • 没有找到相关文章

最新更新