столбец запроса типа string с ограничением даты в sqlserver.txt - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть таблица sql, создание sql которого выглядит следующим образом:

++++++++++ Создать скрипт стола ++++++++

USE [TestDB]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Test](
    [LogTime] [nvarchar](50) NULL,
    [EventTime] [nvarchar](50) NULL,
    [value] [nvarchar](50) NULL,
) ON [PRIMARY]
GO

// +++++++++ End ++++++++

Однако, когда я выбираю данные из таблицы, это значение.

LogTime                         EventTime            value
--------------------------------------------------------------------
2010-11-26 12:10:31.907000000   634263264000000000   1.145604E-10
2010-11-26 12:10:31.907000000   634263264000000000   1.373898E-9
2010-11-26 12:10:31.907000000   634263264000000000   -2.3787419E-10

Почему Eventtime не является форматом даты?

Кроме того, мне нужно выбрать что-то из таблицы в соответствии с периодом даты, например, получить дату, чье время между «2010-10-12 12:00:00» и «2010-10-12 17:00:00» так как построить sql слова?

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

**

UPDATE:

**

Один из форматов даты sql:

YYYY-MM-DD HH:MI:SS.MMM(24h)    ODBC Canonical (with milliseconds)  SELECT CONVERT(VARCHAR(23), GETDATE(), 121)     1972-02-19 06:35:24.489

Но почему цифра миллисекунд даты в моей таблице равна девяти?

Как:

1972-02-19 06: 35: 24. 489

мои данные: 2010-11-26 12: 10: 31. 907000000

Я хочу удалить миллисекунды, так как же преобразовать его в слово sql?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

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

В настоящее время мне неизвестен какой-либо конкретный формат даты и времени SQL, который может представлять эту информацию как дату, чтобы вы могли выполнять обработку условия WHERE, которое вы хотите.

Список распространенных форматов даты SQL

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

Редактировать : Судя по комментариям, данные хранятся в базе данных как правильная дата (хотя и в строковом формате). Если это так, ниже должно работать.

Примечание: 121 - это формат, который также включает миллисекунды. Вы также можете дополнительно использовать 120, если ваши даты не нуждаются в миллисекундах

SELECT LogTime, CONVERT(DateTime, eventTime, 121), value 
FROM Test
WHERE CONVERT(DateTime, eventTime, 121) BETWEEN 
    CONVERT(DateTime, '2010-10-12 12:00:00', 121) AND 
    CONVERT(DateTime, '2010-10-12 17:00:00', 121) 

Примечание. Вы можете избежать преобразования для каждой строки в двух жестко закодированных значениях (возможно, в параметрах), выполнив это всего один раз и сохранив вместо этого переменную datetime. Кроме того, согласно определению , МЕЖДУ включается обе границы.

0 голосов
/ 08 декабря 2010

если можете, измените eventTime на тип данных datetime вместо varchar

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