我在SQL Server 2008中有一个表,如T1, and have column like
C1和C2`
我只想交换C1 to C2
和C2 to C1
例如
C1 C2
-------- --------
12/11/2014 12/10/2014
12/13/2014 12/12/2014
12/15/2014 12/14/2014
12/17/2014 12/16/2014
12/19/2014 12/18/2014
我需要记录如下
C1 C2
-------- --------
12/10/2014 12/11/2014
12/12/2014 12/13/2014
12/14/2014 12/15/2014
12/16/2014 12/17/2014
12/18/2014 12/19/2014
因为我正在尝试类似下面的内容
UPDATE T1 SET C1=C2, C2=C1
编辑:
我收到Conversion failed when converting date and/or time from character string.
错误。
C1为nvarchar(50) datatype
,C2为DateTime
,
我将DateTime.Now.Date
存储在C1中,但它将取决于Window的区域设置,如果Date设置为"MM-DD-yyyy"
格式则在C1值中将采用相同的格式。我的主要问题是一段时间用户可以将其窗口设置更改为任何其他格式,因此我得到了说错误。
How do I swap column values in sql server 2008?的答案由于具有相同的数据类型而无法满足我的要求
我很抱歉只提供int Value
答案 0 :(得分:1)
--drop table #TableA
SELECT *
into #TableA
FROM (
select 10 Num1 , 11 Num2
union
select 12 Num1 , 13 Num2
union
select 14 Num1, 15 Num2
union
select 16 Num1 , 17 Num2
union
select 18 Num1 , 19 Num2
) a
update #TableA SET Num1 = Num2 , Num2 = Num1
SELECT *
FROM #TableA
答案 1 :(得分:1)
您的查询适合您。这是示例并给出了完美的结果。
declare @t table(c1 int, c2 int)
insert into @t values(10,11),(11,13),(14,15),(16,17),(18,19)
select * from @t
update @t set c1 = c2 ,c2=c1
select * from @t
更新: - 请检查我的答案。
您可以通过"set dateformat mdy"
set dateformat dmy
select isdate( '18/12/2014' ), convert( datetime, '18/12/2014' ,103)
you can use ISDATE with convert date function.
set dateformat mdy
--the problem is in your insert not in update, if data is save in 'mm-dd-yyyy', then no issue with swap.
;with cte as (
select
case when isdate('19/12/2014') = 1
then '19/12/2014'
else convert( datetime, '19/12/2014' ,103)
end stdt
from @t
)
select * from cte
--update @t set c1 = c2 ,c2=c1
--select * from @t
答案 2 :(得分:1)
您的查询将有效,如果您想要其他方法,可以按照以下方法进行操作
select* from tablename;
Go
DECLARE @tempcol as int
update tablename
set @tempcol= C1,
C1= C2,
C2= @tempcol
(如果您有任何条件) 条件; GO
select* from tablename;