2016-01-13 4 views
2

Я немного искал и не вижу никаких вопросов, которые отвечали на мой вопрос, так что вот оно.sql - дата не в указанном формате

Я пытаюсь получить дату из базы данных (источник находится в формате даты и времени, т.е. «2015-11-30 00: 00: 00.000») и выберите его как дату, но в другом формате. Я использую функцию Convert для этого после «googleing». Сначала я установил целевой формат как VARCHAR:

Select 
convert(varchar(10),ac_payout_book_dt,104) as 'Dato' 

Результатом является датой в правильном формате, то есть «30.11.2015»

Тогда мне нужно отсортировать его при автоматизации сценария, так, чтобы иметь возможность использовать

ORDER BY Dato DESC 

... Я изменил свой запрос ...

Select  
convert(date,ac_payout_book_dt,104) as 'Dato' 

Теперь результат находится в неправильном формате, т.е. «2015-11-30»

После нескольких раундов в Интернете я также пытался это без удачи

CAST(convert(date,ac_payout_book_dt,104) AS DATE) as 'Dato' 

Любой, кто может помочь мне выяснить, куда я иду неправильно?

BR Andreas

+2

Какая СУБД для этого? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –

+0

К сожалению, добавлен SQL Server для тегов сейчас. Бег 2014. – Andreasp

ответ

3

Ну, если вы используете

Select 
    convert(varchar(10),ac_payout_book_dt,104) as 'Dato' 

затем конвертировать ваш DateTime (который внутренне в SQL Server не имеет формат - это 8-байтовое двоичное значение) в строку - вы можете управлять тем, как дата форматируется в строке.

Для того, чтобы отсортировать вывод, вам нужна дата (без времени, я полагаю) - не проблема, но когда вы делаете

Select  
    convert(date, ac_payout_book_dt, 104) as 'Dato' 

вы преобразуете ваш DateTime в Date (который в SQL Server снова имеет нет формата - это всего лишь 3-байтовое значение бианри) - поэтому стиль «104» здесь бесполезен - вы конвертируете одно двоичное значение в другое двоичное значение - и дата будет отображаться в стандартное форматирование даты SQL Server.

Поскольку это действительно является бинарным к бинарным преобразованием, без строки форматирования участия, я предпочитаю использовать

SELECT CAST(ac_payout_book_dt AS DATE) AS 'Dato' 

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

Так на самом деле, то, что вам нужно знать это:

  • вы используете DATE или DATETIME для сортировки или арифметике дат? В этом случае вы должны использовать родные типы данных - не делайте дату математику на строчном представлении даты!

  • вы хотите выход ваш DATE или DATETIME к экрану? Затем вам нужно преобразовать его в строку с помощью CONVERT или FORMAT и поставлять соответствующие стили форматирования строк/Дата

Так в целом, не зная весь ваш запрос - вы, вероятно, хотите сделать что-то вроде этого:

SELECT 
    CONVERT(VARCHAR(10), ac_payout_book_dt, 104) as 'Dato', 
    ..... (other columns) ..... 
FROM 
    dbo.YourTable 
WHERE 
    .... (some condition) .... 
ORDER BY 
    CAST(ac_payout_book_dt AS DATE) DESC 

Или, может быть, вы хотите, чтобы проверить FORMAT, который доступен с SQL Server 2012 на, что позволяет более гибко при форматировании даты:

SELECT 
    FORMAT(ac_payout_book_at, 'dd.MM.yyyy', 'de-de') 
+2

Спасибо, marc_s. Действительно полезная обратная связь. Кажется, я упустил из виду основной факт даты и времени. Простите за это. Ваш ответ дал мне большую помощь. – Andreasp

+3

@Andreasp: рад, что я смог помочь! Мы живем и учимся - каждый день :-) Все мы .... –

+1

@marc_s вы объяснили это великолепно. Хорошо, мне нужно кое-что узнать. –

3

Я думаю, вы должны попробовать это, заказать с CAST Дата так, чтобы вы выполнили желаемую операцию, и вы также сможете получить нужный формат даты.

SELECT 
    CONVERT(VARCHAR(10), ac_payout_book_dt, 104) as 'Dato' 
ORDER BY 
    CAST(ac_payout_book_dt AS DATE) DESC 
0

Конвертировать 'Deto' в формат 'date' при сортировке. Что-то вроде этого - ORDER BY CONVERT (DATE, Deto, 104) DESC

+1

Вы преобразовываете 'DATETIME' в' DATE' - оба являются ** двоичными ** - это не работает, вам нужно преобразовать в ** STRING **, когда вы хотите применить стиль (104) –

Смежные вопросы