2016-12-16 3 views
1

Я хочу посмотреть таблицу как order by date.Упорядочить по дате в SQL Server, не отображая должным образом

Я написал эту команду

select * 
from companydetails 
order by date desc 

Выход:

4/1/2013 30-11-16 30-11-16 29-11-16 28-11- 16 27-09-16 27-01-2014 26-11-16 26-07-14 24-02-15 23-09-15 23-03-15 21-10-15 21-01-16 20- 08-15 18-11-15 18-03-15 17-08-16 17-04-14 16-09-14 15-02-14 15-02-14 15-02-14 15-02-14 15 -02-14 15-02-14 15-02-14 14-11-14 14-08-14 12-02-14 12-01-2013 11-03-16 09-10-15 08-12-15 06-01-16 04-01-2013 03-01-14 02-10- 15 02-09-14 02-09-14 01-12-15 01-12-14 01-12-14 01-10-15 01-10-15 01-10-14 01-09-15 01-09 -15 01-09-14 01-09-14 01-09-14 01-09-14 01-08-15 01-08-14 01-08-14 01-07-15 01-06-15 01 -06-15 01-04-2014 01-04-14 01-04-14 01-04-14 01-04-14 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04- 13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01- 04-13 01-04-13 01-03-16 01-03-14 01-03-14 01-02-16 01-02-15 01-01-15 01-01-15 01-01-14 NULL

Это не то, что мне нужно было это только приказывать день, и я Google его на Интернете и нашел этот

SELECT * 
FROM 
    companydetails 
ORDER BY 
    CONVERT(DateTime, date,105) DESC 

но это бросает ошибку

преобразования не удалось при преобразовании DateTime из символьная строка.

, когда я выбираю изменить мой стол, я узнаю, что моя начальная дата создания, как nvarchar(50), что мне нужно сделать сейчас?

+0

Я думаю, вы должны хранить свои даты как 'datetime', а не' varchar'. –

+0

Я знаю, но мое превосходное использование для хранения дат в nvarchar, и теперь я столкнулся с проблемой для того же –

+0

@InformationHTI: ваш формат даты также несовместим. – DarkKnight

ответ

1

Как вы упомянули в своем комментарии, вы уже поняли, что поле date находится на nvarchar.

Есть несколько, что вы должны относиться в настоящее время:

  1. Есть ли какие-либо приложения/сайта/отчеты, которые читают/пишут эту таблицу?
    • Если да: если вы не можете контролировать весь источник/иначе, вам будет утомительно модифицировать вашу базу данных.
    • Если нет: рассмотрите вопрос о переносе вашего поля date в DateTime тип данных.
  2. Вы хотите, чтобы перенести данные для поля date?
    • Если да: формат даты в поле date не согласуется. Вам нужно будет выяснить, где он находится, обновить его до 1 и только 1 формат (yy-MM-dd или yyyy-MM-dd) или что вам более удобно.Затем вы можете преобразовать это поле в DateTime тип данных.
    • Если нет: даже если ваши данные согласованы, он не будет следовать порядку времени даты, когда вы организуете, но следуйте порядку алфавита, который иногда будет приводить к неправильному порядку. Чтобы использовать это CONVERT(DateTime, date,105) DESC, вам необходимо сначала отредактировать свои данные в один формат. Например, я могу видеть, что эти 2 записи несовместимы: 01-06-15 & 01-04-2014.
0

Давайте предположим, что вы измените ваши данные в столбце и сделал это последовательно, как вы заявили в комментарии. Тогда попробуйте это: -

SELECT CAST(Column_Name as datetime2(7)) from tablename; 
0

Поскольку тип данных используется для хранения DateTime является NVARCHAR. Для этого вы создаете его как DATE или DATETIME.

select * from companydetails order by CAST(date as DATE) desc 

Формат даты, используемой для хранения, не согласуется с требованиями к SQL Server.

С вашего вывода: 30-11-16 - это один формат даты. Не в формате ММ-ДД-ГГГГ.

01-04-13 - еще один формат. Несмотря на то, что это действительный формат сейчас, он занимает 4 января против вашего предполагаемого значения (я предполагаю) от 1 апреля.

Сервер выдает ошибку на 30-11-16, поскольку она принимает его в формате ДД-ММ-ГГГГ (Но 30 не является действительным месяц и, следовательно, ваша ошибка.)

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

Надеюсь, это поможет.

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