Как конвертировать Дата в nvarchar - PullRequest
0 голосов
/ 15 ноября 2011

enter image description here есть экран поиска, и я хочу показать результаты, выполнив поиск по конкретным данным. Мой фильтр - «показать все даты после даты« 7/5/05 ».

Поскольку это JSFформа, поэтому 7/5/05 сохраняется как дата. И снова это преобразуется в Long как '1120501800000' .

Теперь запрос становится таким

SELECT * FROM   ABC  WHERE  due_date BETWEEN '1120501800000' AND '1952498291808'  ORDER  BY trstart_date DESC 

Но проблема в том, что столбец due_date имеет значение "nvarchar (50)" , а значения сохраняются как "7/5/05".

Может кто-нибудь, пожалуйста, скажите мне, как я могу преобразовать "1120501800000" в "7/5/05". Даже я не знаю, что такое fastTime , как показано на рисунке?

Заранее спасибо.

Я использую Jsf, Spring, IBatis, SQL Server

1 Ответ

1 голос
/ 15 ноября 2011

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

SELECT DATEADD( SECOND
              , CONVERT(BIGINT, '1120501800000') / 1000
              , '1970/01/01')

Преобразуется в 2005/07/04 (yyyy/mm/dd) при 18: 30.

ВВ вашем примере вы получите 2005/07/05, что может быть связано со смещением часового пояса UTC по вашему местному времени.Допустим, вы на 6 часов впереди;что переводится как:

SELECT DATEADD( HOUR
              , 6
              , DATEADD( SECOND
                       , CONVERT(BIGINT, '1120501800000') / 1000
                       , '1970/01/01')
              )

Это преобразуется в 2005/07/05, как и следовало ожидать.

Чтобы получить форматирование mm/dd/yy, на которое вы претендуете:

SELECT CONVERT(VARCHAR(2), DATEPART(MONTH, date)) + '/'
     + CONVERT(VARCHAR(2), DATEPART(DAY, date))   + '/'
     + RIGHT(CONVERT(VARCHAR(4), DATEPART(YEAR, date)), 2)
  FROM ( SELECT DATEADD(HOUR, 6, DATEADD(SECOND, CONVERT(BIGINT, '1120501800000') / 1000, '1970/01/01'))
       ) AS T (date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...