2012-01-27 4 views
1

Я хотел бы преобразовать запрос Oracle SQL в запрос SQL-сервера. Но я столкнулся с проблемой, с помощью следующей строки:Oracle to SQL server Преобразование даты

И to_date (to_char (M_DATE, 'DD-MM-YYYY')) = '27/01/12'

M_DATE: ДАТА NOT NULL

Я использую

to_char (ДАТА, 'DD-MM-YYYY')

, чтобы получить их данные: DD-MM-YYYY 00: 00: 00.000 (данные хранятся как: 25/02/12 15: 32: 06.578)

Так что я искал в Интернете, но Я не нашел доступного решения. Но я не опытный пользователь SQL, так что если кто-нибудь знает решение ..

Благодаря

+1

'TO_DATE (to_char()) 'в столбце, который уже является' DATE', является полной бессмыслицей в Oracle. В вашем запросе Oracle вы должны использовать 'M_DATE = to_date ('27/01/12 ',' DD/MM/YY '))' –

+0

@MarkBannister: вы не можете использовать to_char() для чего-то, что не является 'DATE' в Oracle - по крайней мере, не с маской формата, указанной –

+0

Да, я понял, что маска сделала разницу после публикации этого комментария. –

ответ

3

В общем при удалении любых значений времени от даты, я использовал бы Date функцию вместо преобразования в строку

DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE())) 

вместо

CONVERT(VARCHAR, GETDATE(), 103) 

Хотя конечный результат один и тот же вы поддерживаете формат даты, и пока у меня нет никаких конкретных результатов устанавливает, чтобы доказать это окончательно, я нашел, что это будет гораздо быстрее при работе с большими количествами да та.

+0

На SQL Server 2008 проще просто перевести на 'date'.Это тоже возможно. –

+0

Каждый день - школьный день! Я никогда раньше не использовал CAST (GETDATE() AS DATE), но использовал 2008 год. Спасибо @MartinSmith – GarethD

+0

Решение: WHERE CONVERT (NVARCHAR, M_DATE, 103) = '27/01/2012 ' – Dsandre

0
SELECT CONVERT(VARCHAR(25), GETDATE(), 131) 
0

Вы можете просто сделать:

AND convert(varchar(8), M_DATE, 3) = '27/01/12' 

Конечно, это не будет работать если у вас есть даты из других веков.

Я не уверен, что вы подразумеваете под «данными запасаются как»; имейте в виду, что Microsoft SQL Server DATE тип only has a precision of one day. Если вы хотите, чтобы иметь время, а также на следующий день, вы должны использовать DATETIME2type

+0

лучше преобразовать буквальный ''27/01/12'' в дату с помощью' to_date'. Тогда Oracle может использовать возможный индекс m_date. –

+0

Я считаю, что вопросник преобразует Oracle SQL в MS SQL. Тем не менее, это все еще, вероятно, хороший момент. –

1

В Oracle, я бы удалить времени элемент DateTime с помощью TRUNC - например, так:

AND trunc(M_DATE) = ... 

В SQLServer, я бы преобразовать в дату - например, так:

AND convert(date,M_DATE) = ... 
Смежные вопросы