列设置为 0 而不是日期存储过程

Column Set to 0 Instead of Date Stored Procedure

我试图在存储过程中将一列设置为当前日期(以 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)

如果 datein 存储正确(作为 date/time),那么您无需担心转换。

此外,您不需要动态 SQL。只是:

Update [dbo].[tabfget]
    set DATEIN = cast(getdate() as date);

如果——恐怖中的恐怖——你将日期存储为字符串而不是正确的格式,那么你应该修复数据库。如果那不可能,你可以这样做:

Update [dbo].[tabfget]
    set DATEIN = convert(varchar(10), GETDATE(), 103);

但是,如果日期 存储为字符串,那么您应该始终使用 ISO 标准格式,例如 YYYY -MM-DD.

试试这个:

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);

为什么不能直接点赞

Update [dbo].[tabfget] set DATEIN = @dateone

(或)

Update [dbo].[tabfget] set DATEIN = convert(varchar,GETDATE(),103 )

是的,format/style 103 应该 / 而不是像

这样的 -
select GETDATE()

将导致 2015-05-29 20:43:38.547

select CONVERT(varchar(15), GETDATE(), 103)

将导致 29/05/2015

您绝对应该在没有动态 sql 的情况下进行更新。但是零的原因是您没有将日期作为文字引用并且它被评估为整数除法。 (格式 103 为 mm/dd/yyyy。)