首页 > 解决方案 > 将 NVARCHAR 转换为英国日期

问题描述

我正在寻找将 NVARCHAR 的用户输入转换为英国日期

用户的输入将始终最多为 6 位。

例如:

151119 (DDMMYY) --> 15NOV19

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

标签: sql-servertsqldatessms

解决方案


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

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 上使用格式化函数。


推荐阅读