如何将现有表中的nvarchar列转换为日期? SQL Server

时间:2016-02-28 18:05:38

标签: sql sql-server datetime format varchar

我在SQL Server中创建了一个像这样的表:

CREATE TABLE nombres
(
     nombre varchar (200) not null,
     fecha_nac char (10) not null,
     fecha_alta char (10) not null,
)

我创建了一个存储过程来快速填充表格。下一步是"格式化"日期格式为日期。我看到我可以使用

SELECT CONVERT(datetime, 'a string', 100)

在这种情况下,我想使用我的列作为参数,如此

SELECT CONVERT (datetime, select fecha_nac from nombres, 100)

但是我收到了错误。

如果我得到任何帮助,我将感激不尽

2 个答案:

答案 0 :(得分:0)

使用您拥有的日期格式(mm-yyyy-dd),您可以执行一些字符串操作以将其转换为dd-mm-yyyy,然后可以使用{{3}将其解析为DATE }}

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

答案 1 :(得分:0)

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;