Как переформатировать и отсортировать даты, хранящиеся в nvarchar - PullRequest
0 голосов
/ 15 июля 2009

Я пытаюсь отобразить месяц и часть YY столбца даты так, чтобы он выглядел как

Оригинальный формат

Apr 12 2009;          
Feb 20 2009;
Dec 24 2008;
May 18 2009;
Jan  8 2009;
Dec  6 2008;
Apr 19 2009;
Jan  4 2009;
May 13 2009;
Jan  5 2009

Начиная с этих дат, часть дня должна быть сорвана так, чтобы она выглядела как «09 апреля», и все еще может быть отсортирована по дате, так что она выглядит как:

Dec 08;
Jan 09;
Feb 09;
Mar 09;
Apr 09;
May 09

Спасибо, Провеса.

Ответы [ 3 ]

2 голосов
/ 15 июля 2009

Если вы хотите сохранить даты в виде строк в базе данных, вам нужно использовать формат, основанный на том же принципе, что и стандарт ISO-8601, то есть вы используете числовые месяцы и ставите на первое место самое важное значение. *

Для того, чтобы тексты могли быть отсортированы, ваши значения должны выглядеть примерно так:

08-12, 09-01, 09-02, 09-03, 09-04, 09-05

Однако я предлагаю вместо этого хранить даты в качестве значений даты и времени в базе данных и позаботиться о форматировании при отображении значений. Таким образом, вы можете легко отсортировать их в базе данных (а также выполнить любую другую обработку, например, получить разницу между двумя датами).

Из значения даты и времени вы можете легко получить желаемый формат. Например, в .NET вы используете theDate.ToString("MMM yy"), чтобы форматировать дату точно так, как вы хотите. Поскольку вы выполняете форматирование после получения данных из базы данных, не проблема в том, что формат не может быть отсортирован по тексту.

0 голосов
/ 15 июля 2009

вы не говорите, какая база данных, это для SQL Server ... попробовать:

declare @x table (datestring nvarchar(30))
insert into @x values ('Feb 20 2009')
insert into @x values ('Dec 24 2008')
insert into @x values ('May 18 2009')
insert into @x values ('Jan 8 2009')
insert into @x values ('Dec 6 2008')

select * from @x

SELECT
    LEFT(CONVERT(varchar(30),convert(datetime,datestring),109),3)+' '+SUBSTRING(CONVERT(varchar(30),convert(datetime,datestring),121),3,2)
    FROM @x
    ORDER BY CONVERT(datetime,datestring)

Не следует хранить даты в строках , они занимают больше места и затрудняют их сортировку и сравнение.

0 голосов
/ 15 июля 2009

Вам нужна функция LEFT , и вы можете сортировать datetime или smalldatetime в SQL SERVER.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...