Справка по T-SQL Query - PullRequest
       14

Справка по T-SQL Query

0 голосов
/ 10 апреля 2011

У меня проблемы с тем, чтобы мои запросы возвращали соответствующие результаты для следующих запросов:

  1. На указанную конкретную дату перечислите гостей, которых планируется проверить, group ed by тип виллы; дополнительно также представьте их количество.

Таблица бронирования гостей имеет следующие столбцы с данными: (confirm_no, agent_id, g_name, g_phone)

В таблице бронирования есть следующие столбцы с данными: (confirm_no, credit_card_no, res_checkin_date, res_checkout_date, default_villa_type, price_plan).

SELECT g_name, default_villa_type
FROM guest_reservation, reservation
WHERE
guest_reservation.confirm_no = reservation.confirm_no
AND res_checkout_date = 24/12/2010
order by default_villa_type, g_name;

SELECT COUNT(*) as total_checking_out
FROM reservation
WHERE res_checkout_date = 24/12/2010

Разве этот запрос не должен работать? Когда я запускаю его, я не получаю никаких ошибок, просто никаких результатов не возвращается (и счетчик равен 0), и, глядя на свою таблицу, я знаю, что должны быть возвращены 2 имени гостя, когда они оформляют заказ в тот день.

Помощь

Ответы [ 6 ]

4 голосов
/ 10 апреля 2011

Не забудьте разделить литералы даты одинарными кавычками, такими как '2010-12-24', и помните, что поля даты и времени будут учитывать время. Попробуйте что-то вроде этого

WHERE res_checkout_date BETWEEN '2010-12-24' AND '2010-12-24 23:59:59.997'

или как этот, чтобы получить все записи 24 декабря 2010 года, предполагая, что res_checkout_date является полем datetime или smalldatetime.

WHERE MONTH(res_checkout_date) = 12 AND DAY(res_checkout_date) = 24 AND YEAR(res_checkout_date) = 2010
2 голосов
/ 10 апреля 2011

Просто мысль, но вы пытались использовать DATEDIFF для сравнения дат?Это позволяет сравнивать дату на основе дня и игнорировать время:

WHERE DATEDIFF(d, '2010-12-24', res_checkout_date) = 0
2 голосов
/ 10 апреля 2011

T-SQL неправильно читает ваши даты.Литералы даты должны быть отформатированы как строковые (т.е. '24/12/2010', обратите внимание на одинарные кавычки), тогда как ваши даты представляются в виде целых чисел (то есть 24 делятся на 12, что делится на 2010).

Так в вашемкод, то, что вы на самом деле делаете:

WHERE
guest_reservation.confirm_no = reservation.confirm_no
AND res_checkout_date = 0

Для этого все, что вам нужно сделать, это заключить в кавычки одинаковые даты.

Также помните, что указание только датыПредполагается, что вы действительно имели в виду: 24/12/2010 00:00:00.000, и если дата оформления заказа на самом деле 24/12/2010 00:01:00 (т.е. одна минута после полуночи), она не будет включена в результат.Чтобы учесть все времена в течение одного дня, сделайте следующее:

WHERE
guest_reservation.confirm_no = reservation.confirm_no
AND res_checkout_date >= '24/12/2010' AND res_checkout_date < '25/12/2010'

В качестве незначительного признака, я бы рекомендовал вам использовать более сжатый формат для ваших дат.форматирование дат в формате dd/mm/yyyy может привести к путанице и появлению незначительных ошибок в вашем коде, если вы переместите свою базу данных на сервер с другим языком по умолчанию (например, переход с сервера, где даты отформатированы dd/mm/yyyy, на сервер, где датыотформатированный mm/dd/yyyy).Чтобы избежать этого, я обычно использую формат даты ANSI SQL, который является yyyy-MM-dd HH:mm:ss и не зависит от культуры.

1 голос
/ 10 апреля 2011

Вы должны заключить вашу дату в кавычки. Как и сейчас, вы делаете что-то аналогичное с where res_checkout_date = 0 (вы ныряете 24 на 12, что дает 2, затем 2 к 2010, что усекает до 0)

1 голос
/ 10 апреля 2011

Вы пытались поместить дату в '24/12/2010'

SELECT g_name, default_villa_type
FROM guest_reservation, reservation
WHERE
guest_reservation.confirm_no = reservation.confirm_no
AND convert(varchar,res_checkout_date,103) = '24/12/2010'
order by default_villa_type, g_name;

РЕДАКТИРОВАТЬ: Я проверил, чтобы поставить дату без 'безрезультатно.Когда я добавил 'на дату, он показал мне некоторые результаты.Как у вас работает запрос?

0 голосов
/ 10 апреля 2011

попробуйте это:

    SELECT g_name, default_villa_type
    FROM guest_reservation, reservation
    WHERE
    guest_reservation.confirm_no = reservation.confirm_no
    AND res_checkout_date = '24/12/2010'
    order by default_villa_type, g_name;

    SELECT COUNT(*) as total_checking_out
    FROM reservation
    WHERE res_checkout_date = '24/12/2010'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...