如何将mm / dd / yyyy格式的日期转换为yyyy-mm-dd hh:mi:ss.mmm

时间:2016-02-21 14:46:58

标签: sql sql-server datetime format

我正在将数据插入表中,在插入之前我需要检查数据是否存在。

我有一个由datetimeint两列组成的复合键。

在插入之前,我需要检查表中是否存在具有相同时间和ID的数据。

用户插入的日期是'mm / dd / yyyy'。

表中的datetime数据如下所示:'2016-01-12 00:00:00.000'。 id字段为int

所以,我有一个问题:

if not exists(select count(*) from table_1 where MyDate = @myDate and id = @id)
insert into table_1 .....

格式化用户发送的日期以匹配表格中的datetime格式的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

检查此sqlfiddle,了解如何在查询中使用不同的日期格式。可能会帮助你解决它。

http://www.sqlfiddle.com/#!2/fd0b7/5

答案 1 :(得分:0)

我猜这个问题是关于SQL Server的,基于语法。代码段中的问题远远超出了日期格式。

首先,表达式:

if not exists(select count(*) from table_1 where MyDate = @myDate and id = @id)

永远不会返回true,因为子查询总是返回一行一行。如果没有匹配,则列包含0,它确实存在。

你打算:

if not exists(select 1 from table_1 where MyDate = @myDate and id = @id)

其次,如果您明智地选择让数据库强制执行唯一性约束,则无需进行此检查。因此,在两列上定义唯一索引或约束:

create unique index unq_table_1_id_mydate on table_1(id, MyDate);

现在,数据库不允许您插入重复值,并且不需要if

接下来,我建议您在应用程序层修复日期格式。 YYYY-MM-DD是ISO标准日期格式,非常合理。但是,如果您不想这样做,请使用convert()

insert into table_1(id, MyDate, .....)
    select @id, convert(datetime, @MyDate, 101), . . .

数据库中的值看起来正确存储为日期/时间值,因此这应该可以正常工作。