如何将 nvarchar 列从现有的 table 转换为日期? SQL 服务器
How convert nvarchar column from a existing table to date? SQL Server
我在 SQL 服务器中有一个 table 是这样创建的:
CREATE TABLE nombres
(
nombre varchar (200) not null,
fecha_nac char (10) not null,
fecha_alta char (10) not null,
)
我创建了一个存储过程来快速填充 table。下一步是 "formatting" 将日期制作成日期格式。我看到我可以使用
SELECT CONVERT(datetime, 'a string', 100)
在这种情况下,我想像这样使用我的列作为参数
SELECT CONVERT (datetime, select fecha_nac from nombres, 100)
但是我得到一个错误。
如有帮助我将不胜感激
使用您拥有的日期格式 (mm-yyyy-dd
),您可以进行一些字符串操作以将其转换为 dd-mm-yyyy
,然后可以将其解析为 DATE
和 format 103.
WITH cte AS (
SELECT '11-1994-27' fecha_nac
)
SELECT
CONVERT(DATE, SUBSTRING(fecha_nac, 9, 2) + '-' + SUBSTRING(fecha_nac, 0, 8), 103)
FROM cte;
-- 1994-11-27
您的 fecha_alta 格式更简单,可以立即使用格式 102 进行解析。
WITH cte AS (
SELECT '2012-1-12' fecha_alta UNION ALL
SELECT '1994-4-5'
)
SELECT
CONVERT(DATE, fecha_alta, 102)
FROM cte;
-- 2012-01-12
-- 1994-04-05
DECLARE @site_value INT;
SET @site_value = 1;
WHILE @site_value <= (SELECT COUNT(nombre) FROM nombres)
BEGIN
WITH MyCte AS
(
SELECT fecha_nac,number= ROW_NUMBER() OVER (ORDER BY dbo.nombres.fecha_nac)
from dbo.nombres
)
SELECT convert(datetime,(SELECT MyCte.fecha_nac from MyCte WHERE number=@site_value), 101)
SET @site_value = @site_value + 1;
END;
我在 SQL 服务器中有一个 table 是这样创建的:
CREATE TABLE nombres
(
nombre varchar (200) not null,
fecha_nac char (10) not null,
fecha_alta char (10) not null,
)
我创建了一个存储过程来快速填充 table。下一步是 "formatting" 将日期制作成日期格式。我看到我可以使用
SELECT CONVERT(datetime, 'a string', 100)
在这种情况下,我想像这样使用我的列作为参数
SELECT CONVERT (datetime, select fecha_nac from nombres, 100)
但是我得到一个错误。
如有帮助我将不胜感激
使用您拥有的日期格式 (mm-yyyy-dd
),您可以进行一些字符串操作以将其转换为 dd-mm-yyyy
,然后可以将其解析为 DATE
和 format 103.
WITH cte AS (
SELECT '11-1994-27' fecha_nac
)
SELECT
CONVERT(DATE, SUBSTRING(fecha_nac, 9, 2) + '-' + SUBSTRING(fecha_nac, 0, 8), 103)
FROM cte;
-- 1994-11-27
您的 fecha_alta 格式更简单,可以立即使用格式 102 进行解析。
WITH cte AS (
SELECT '2012-1-12' fecha_alta UNION ALL
SELECT '1994-4-5'
)
SELECT
CONVERT(DATE, fecha_alta, 102)
FROM cte;
-- 2012-01-12
-- 1994-04-05
DECLARE @site_value INT;
SET @site_value = 1;
WHILE @site_value <= (SELECT COUNT(nombre) FROM nombres)
BEGIN
WITH MyCte AS
(
SELECT fecha_nac,number= ROW_NUMBER() OVER (ORDER BY dbo.nombres.fecha_nac)
from dbo.nombres
)
SELECT convert(datetime,(SELECT MyCte.fecha_nac from MyCte WHERE number=@site_value), 101)
SET @site_value = @site_value + 1;
END;