sqlserver дата арифметическая задача - PullRequest
1 голос
/ 03 марта 2009

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

Я хочу, чтобы события проводились в определенную дату, скажем, 2/28/2009

Но таблица БД содержит данные о дате в форме 28.02.2009 10:00:00, 28.02.2009 12: 00: 00.

Я пробовал этот запрос в sproc, созданном в VS 2005 IDE, но он не работал

ALTER PROCEDURE dbo.spSelectBenchEvent
(   
@EVENT_DATE DATE // BTW, THIS RETURNS ERROR :CANNOT FIND DATE DATATYPE.
                 //@EVENT_DATE HAS INVALID DATATYPE 
)
AS
BEGIN TRAN
SET NOCOUNT ON;

SELECT     ID, EID, BENCHID, PACCODE, START_TIME, END_TIME
    FROM         tbl_benchbook
    WHERE START_TIME=EVENT_DATE
    ORDER BY START_TIME

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

Ответы [ 4 ]

2 голосов
/ 03 марта 2009

Было много вопросов, связанных с этим, проверьте:

и для проверки наилучшего решения по производительности: MS SQL Дата только без времени

Ваш код может выглядеть следующим образом:

select     
    id, eid, benchid, paccode, start_time, end_time
from  
    tbl_benchbook
where start_time >= dateadd(dd, datediff(dd, 0, @event_date), 0)
and start_time < dateadd(dd, datediff(dd, 0, @event_date)+1, 0)
2 голосов
/ 03 марта 2009

На основании вашего обновленного квеста это должно сработать:

   SELECT  ID, EID, BENCHID, PACCODE, START_TIME, END_TIME
   FROM    tbl_benchbook
   WHERE   START_TIME >= @EVENT_DATE 
   AND     START_TIME < DATEADD(day,1,@EVENT_DATE)
   ORDER BY START_TIME
2 голосов
/ 03 марта 2009

Если вы хотите оценить все события на дату 29.03.2009, используйте следующее где cluase.

SELECT *
FROM tableName
WHERE Date >= '2009/03/29' AND  Date < '2009/03/30' 

Ключевым моментом, который следует здесь отбросить, является то, что для захвата всех записей, которые произошли в данную дату, вам необходимо определить диапазон дат, включающий все значения времени для этого дня.

Имеет смысл?

Ура, Джон

0 голосов
/ 03 марта 2009
--1. you need to make sure there is no time on the parameter
--2. you can just use "+1" on the datetime, to get the next day



    enter ALTER PROCEDURE dbo.spSelectBenchEvent
    (   
    @EVENT_DATE DATETIME 
    )
    AS
    BEGIN TRAN
    SET NOCOUNT ON;

    --remove any time from given date
    SET @EVENT_DATE=CONVERT(char(10),@EVENT_DATE,111)


    SELECT     ID, EID, BENCHID, PACCODE, START_TIME, END_TIME
            FROM         tbl_benchbook
            WHERE START_TIME>=@EVENT_DATE AND START_TIME<@EVENT_DATE+1
            ORDER BY START_TIME
    code here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...