我试图在存储过程中将列设置为当前日期(格式为dd / mm / yyyy),但该列只是设置为0.代码如下:
USE [DBDataOne]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
declare @dateone varchar(max)
declare @dodate varchar(max)
select @dateone=convert(varchar,GETDATE(),103 )
select @dodate='Update [dbo].[tabfget] set DATEIN='+@dateone
exec (@dodate)
答案 0 :(得分:4)
如果datein
存储得当(作为日期/时间),那么您不必担心转换。
此外,您不需要动态SQL。只是:
Update [dbo].[tabfget]
set DATEIN = cast(getdate() as date);
如果 - 恐怖恐怖 - 您将日期存储为字符串而不是正确的格式,那么您应该修复数据库。如果那是不可能的,你可以这样做:
Update [dbo].[tabfget]
set DATEIN = convert(varchar(10), GETDATE(), 103);
但是,如果日期将存储为字符串,则始终使用ISO标准格式,例如YYYY-MM-DD。
答案 1 :(得分:1)
为什么你不能直接做
Update [dbo].[tabfget] set DATEIN = @dateone
(OR)
Update [dbo].[tabfget] set DATEIN = convert(varchar,GETDATE(),103 )
是的,格式/格式103
应该为您/
代替-
select GETDATE()
将导致2015-05-29 20:43:38.547
select CONVERT(varchar(15), GETDATE(), 103)
将导致29/05/2015
答案 2 :(得分:0)
试试这个:
declare @dateone varchar(max)
declare @dodate varchar(max)
select @dateone=convert(varchar,GETDATE(),103 )
select @dodate='Update [dbo].[tabfget] set DATEIN='+quotename(@dateone,char(39));
Exec(@dodate);
答案 3 :(得分:0)
你绝对应该在没有动态sql的情况下进行更新。但零的原因是你没有引用日期作为文字,它被评估为整数除法。 (格式103是mm / dd / yyyy。)