sql-server - 将 NVARCHAR 转换为英国日期
问题描述
我正在寻找将 NVARCHAR 的用户输入转换为英国日期
用户的输入将始终最多为 6 位。
例如:
151119 (DDMMYY) --> 15NOV19
120119 (DDMMYY) --> 2019 年 1 月 12 日
解决方案
您首先需要一个有效的DATE
或DATETIME
/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), ' ', ''));
注意:我建议将日期值存储在具有DATE
或DATETIME
数据类型的列上。您可以在应用程序上格式化日期值,也可以直接在 SQL-Server 上使用格式化函数。
推荐阅读
- java - android studio上的返回视图问题
- express - 尽管配置了正文解析器,但 Express post 请求始终为 req.body 返回未定义或空对象
- python - 尝试创建嵌套字典时出现 KeyError
- post - 如何在 Flutter 中向 Web 应用发送数据?
- c - 如何转换数字的位数?
- matplotlib - 知识分享:Matplotlib 按钮和鼠标处理程序
- excel - 将 INDEX-MATCH 与可互换的字符串一起使用
- c++ - 是否可以在 C++ 中将父对象强制转换为子对象?
- python - 加快python中的动画线图
- bash - Linux sed 删除带有模式的 2 行