我有两张桌子。
NEW [包含数据] [所有列都是varchar]
NEW2 [空表] [列具有不同的数据类型]
我想将所有数据从New复制到New2。
我做的是,
SELECT T.*
INTO #tmp
FROM (SELECT *
FROM [dbo].[new]) AS T
然后
INSERT INTO New2(col1, col2....)
SELECT *
FROM #TMP
但它不起作用。
Msg 242, Level 16, State 3, Line 2
The conversion of a varchar data type to a smalldatetime data type resulted in an out-of-range value.
The statement has been terminated.
[我想要的是更改NEW表的列数据类型,尤其是varchar到smalldatetime。所以我试过这种方式。任何其他方法也是受欢迎的。]
非常感谢任何帮助。
谢谢。
答案 0 :(得分:2)
是。完成。
我做的是, 在SQL Server表中导入的Excle数据,表中的所有列都是varchar数据类型。 问题出在excel数据,日期值,某处是NA。所以我不得不用null替换所有那些NA值。
要检查表中的那些无效日期值,我使用了以下命令。
SELECT ISDATE(COL_NAME) AS Result
SELECT ISNULL(COL_NAME) AS Result
为此,有时您还需要检查&使用以下命令设置SQL Server的日期格式
DBCC useroptions
SET DATEFORMAT mdy
然后我将所有结果值替换为NULL
UPDATE TABLE SET COLUMN = NULL WHERE ISDATE(COLUMN) = 0 OR COLUMN = 'NA'
最后,我使用简单的alter命令手动更新了所需的列,
ALTER TABLE ALTER COLUMN COL_NAME <<data type>>
我还将我的dateforamat改为dmy,之前是mdy。
感谢Suraj Singh,Deepshikha提供了有用的建议。
答案 1 :(得分:1)
将您的专栏插入smalldatetime
SET DATEFORMAT ymd
INSERT INTO New2(col1, col2....)
SELECT Col1,Col2 , CAST('2007-05-08 12:35:29' AS smalldatetime) As Col_Name,...Col3
FROM #TMP
答案 2 :(得分:1)
尝试:
DECLARE @NEW TABLE([date] VARCHAR(20));
INSERT @NEW SELECT '2/8/2013 15:00' ;
select LEFT([date],2) + SUBSTRING([date],3,2) + SUBSTRING([date],5,4) + ' '+ RIGHT([date],5)+':00'
from @NEW
UPDATE @NEW SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME,
LEFT([date],2) + SUBSTRING([date],3,2) + SUBSTRING([date],5,4) + ' '+ RIGHT([date],5)+':00', 120));
SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @NEW;
答案 3 :(得分:0)
试试这个
SET DATEFORMAT ymd
INSERT INTO destination_table(column_name)
SELECT Column_name As Aliace_name
FROM Source_table