我在SQL Server中有两列。我有一个SQL批量插入,它在数据库中以下列格式存储日期:
第一列类型为DATETIME
- 它以此格式存储日期:2018-07-02 00:00:00.000
第二列类型为DATE
,并存储此格式:2018-07-02
以下部分没有使用批量插入。
当我插入新日期时,其格式正在改变。我在C#中为第一列和第二列提供了以下代码
DateTime.ParseExact(txtODR.Text, "dd/MM/yyyy", null);
DateTime.ParseExact(txtWorkCompDt.Text, "dd/MM/yyyy", null);
当我查看SQL Server时,它以这种方式存储"2018-02-07 00:00:00.000" and "2018-02-07"
当我尝试从C#(2018-07-02 00:00:00.000 & 2018-07-02
)插入/更新时,为什么它不以所需的格式存储。这有什么不对?请帮帮我
SQL代码
DECLARE @P_ORDER_RECIVED_DATE NVARCHAR(100) = '2018/15/02'
UPDATE [dbo].[T_INSTALATION]
SET [Order_Recieved_Date] = CONVERT(VARCHAR,@P_ORDER_RECIVED_DATE, 123)
where Order_Install_ID = '161'
答案 0 :(得分:1)
这取决于SQL Server的Environment设置,如果您的设置被设置为yyyy/MM/dd
,那么当您在数据库中插入或更新日期时,它将保持这种状态,没有任何内容你的代码错了。
有一种方法可以使用SQL Server的FORMAT方法手动更改它,无论全局配置如何,它都会格式化日期。
示例T-SQL可以是:
SELECT FORMAT(SYSDATETIME(), 'dd-MM-yyyy', 'en-US');
这将返回25-02-2018
答案 1 :(得分:0)
dd / MM / yyyy很容易与MM / dd / yyyy格式混淆。
例如,日期11/02/2018可能代表2月11日或11月2日。
您正在查看SSMS向您显示的内容。为了安全起见,最好以yyyy MM dd格式存储日期。无论存储格式如何,您都应在SELECT
语句中使用自己的格式。
不支持yyyy-dd-MM格式。您可以手动从给定字符串2018/15/02
中提取字符以创建日期。对于将来的使用,我强烈建议在项目中将日期格式更改为yyyy-MM-dd或dd / mm / yyyy。