2016-07-21 2 views
-1

Цель состоит в том, чтобы по умолчанию заполнить все поля ввода запроса '%' и позволить пользователю вводить реальные значения там, где они хотят. Однако это вызывает проблему для поля DATE/TIME. Я получаю ошибку: Conversion failed when converting date and/or time from character string. Как я могу достичь эквивалента '%', но для дат?SQL: Каков эквивалент «%» для даты/времени?

DECLARE @trans_date datetime = '%' 

SELECT 
    t.lp_num, 
    t.trans_date 
FROM ISW_LPTrans AS t 
WHERE t.trans_date = @trans_date 

Edit: - Убрана LIKE и заменены =, потому что люди держали слишком фокусируются на том, что и это не в центре внимания этот вопрос.

+0

Если itrans_date является дата-временем, и его следует рассматривать как таковой, ищите даты * диапазоны *, используя BETWEEN/DATEDIFF/DATEPART и т. д., вам нужно было бы отнести столбец к типу символа, который неэффективен и не слишком полезен для большинства сценариев поиска. –

+0

Как пользователь вводит данные? Это из внешнего источника или непосредственно внутри СУБД? Я не уверен на 100% в 2008 году, но я использую 2014, и вы можете использовать LIKE '%' непосредственно с датой. Проблема в том, что вы пытаетесь сохранить строку «%» в качестве даты. Когда вы используете LIKE, он относится к нему по-разному (по сравнению с использованием знака =). – CodyMR

+0

@ Cody360c будет через интерфейс Report Builder 3.0. Так через отчет. – whatwhatwhat

ответ

0

Это слишком длинный комментарий. Ваш запрос не имеет смысла. LIKE для строки и даты не являются строками.

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

Однако выбор даты является более типичным решением для выбора дат, и в результате код не использует LIKE.

+0

Основная цель состоит в том, чтобы позволить пользователям в построителе отчетов 3.0 оставить значение '%' по умолчанию в поле ввода или поставить свою собственную дату. То есть, по умолчанию запрос должен возвращать все даты, а затем сужать его на определенную дату только тогда, когда пользователь предоставляет реальную дату. Как я могу это сделать? – whatwhatwhat

+0

@whatwhatwhat. , , Обычно приложение выбирает либо одну дату, либо диапазон дат и передает это в качестве параметров в запрос. Когда параметры «NULL», тогда будут выбраны все даты. –

+0

Да, это то, чего я пытался добиться - попытка воспроизвести эффект выбора всех дат, но с стороны запроса. – whatwhatwhat

0

Вы не можете использовать ключевые слова LIKE непосредственно по датам. LIKE в основном используется для строковых значений.

Однако вы можете использовать CONVERT functio n, чтобы указать дату как varchar, а затем применить ключевое слово LIKE. Например:

CONVERT(VARCHAR(25), trans_date, 126) LIKE '2016-10-01%' 

The goal is to, by default, populate all the input fields of a query with a '%' and let the user put in real values wherever they want.

Если вы хотите, чтобы пользователь должен иметь возможность ввести дату, то вы можете просто предоставить NULL значение вашей даты столбца вместо заполнения его со значением% (который абсолютно неопределенный для столбца даты)

+0

Это требует предупреждения о воздействии на здоровье. –

+1

Это что-то только в ранних версиях SQL-Server? Я использую 2014, и я могу использовать LIKE непосредственно с датой – CodyMR

+0

@ Cody360c интересным моментом. – whatwhatwhat

Смежные вопросы