2016-02-21 1 views
0

Я вставляю данные в таблицу и перед вставкой Мне нужно проверить, существуют ли данные.Как преобразовать дату в формате mm/dd/yyyy в yyyy-mm-dd hh: mi: ss.mmm

У меня есть составной ключ, состоящий из двух столбцов datetime и int.

Перед вставкой Мне нужно проверить, имеются ли данные с одинаковым временем и идентификатором в таблице.

Дата, в которую пользователь вводит, находится в 'мм/дд/гггг'.

Данные 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 в таблице?

+1

Какой РСУБД это? Часто имеет значение, используете ли вы MySQL, PostgreSQL, Oracle, SQL Server или IBM DB2, или что-то еще.Добавьте соответствующий тег на свой вопрос! –

+0

RDBMS - это сервер Sql – gene

+0

Также стоит отметить, что [сервер Sql не сохраняет формат отображения даты.] (Http://stackoverflow.com/questions/30032915/how-to-cast-the-datetime-to-time/ 30033028 # 30033028) –

ответ

0

Проверьте этот sqlfiddle о том, как использовать различные форматы дат в вашем запросе. Могу помочь вам решить эту проблему.

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

0

Я предполагаю, что речь идет о SQL Server, основанный на синтаксисе. Проблемы в фрагменте кода значительно превосходят форматы даты.

Во-первых, выражение:

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

никогда не возвращает истину, потому что подзапрос всегда возвращает один ряд с одной колонкой. Если ничего не соответствует, столбец содержит 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 не требуется.

Далее я предлагаю вам исправить формат даты на уровне приложения. ГГГГ-ММ-ДД является стандартным форматом даты ISO и вполне разумным. Однако, если вы не хотите, чтобы сделать это, используйте convert():

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

Значение в базе данных выглядит правильно хранится в виде значения даты/времени, так что это должно работать нормально.

+0

Это вам ответ, но мне нужно использовать таблицу, которая предоставляется мне и определена без уникального индекса – gene

0

Вы можете использовать следующую строку, чтобы преобразовать дату в нужном формате в сервере SQL:

select FORMAT(@your_date, 'yyyy-MM-dd HH:mm:ss', 'en-US') from Your_Table 
Смежные вопросы