我希望将NVARCHAR用户输入转换为英国日期
用户的输入将始终是最多6位数字。
例如:
151119(年月日(-->2019年11月15日
120119(DDMMYY(-->2019年1月12日
您首先需要一个有效的DATE
或DATETIME
/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上的演示
注意:我建议将日期值存储在具有DATE
或DATETIME
数据类型的列上。您可以在应用程序上格式化日期值,也可以直接使用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 |