Неверный синтаксис рядом с ')'. SQL-запрос неверен при работе как с DBeaver, так и с файлами Java-картографирования?

Я предпочитаю делать «PAD» для данных. MySql называет его LPAD, но вы можете обойтись и сделать то же самое в SQL Server.

ORDER BY REPLACE (STR (ColName, 3), SPACE (1), '0')

Эта формула предоставит ведущие нули на основе длины столбца 3. Эта функциональность очень полезен в других ситуациях вне ORDER BY, поэтому я хотел бы предоставить эту опцию.

Результаты: 1 становится 001, а 10 становится 010, а 100 остается неизменным.

-3
задан Chiranjhivi Ghimire 17 January 2019 в 07:03
поделиться

3 ответа

Вы не можете использовать IF внутри выражения.

0
ответ дан talex 17 January 2019 в 07:03
поделиться

Так как вы не можете использовать If внутри выражения, вы можете написать свой sql следующим образом:

DECLARE @source as NVARCHAR(MAX) = (SELECT md.[source] FROM sports_service.meet.meet_detail md WHERE md.meet_id = #{meetId})

    WHERE reg.is_waitlist = 0 AND reg.cancelled_dt IS NULL
    AND NOT EXISTS (
    SELECT
    1
    FROM
    sports_service.meet.meet_invitations i
    WHERE
    i.meet_id = pmm.meet_id
    AND i.sports_person_id = reg.sports_person_id)
    AND ( @source <> 'MANUAL' 
    AND 
    EXISTS ( SELECT 1 FROM
    sports_service.meet.session session
    INNER JOIN sports_service.meet.event event ON
    event.session_id = session.id
    WHERE
    pmm.meet_id = session.meet_id
    AND sports_service.dbo.fnGetMeetAge(p.birth_dt,
    detail.age_up_date,
    detail.id_format) >= event.low_age
    AND sports_service.dbo.fnGetMeetAge(p.birth_dt,
    detail.age_up_date,
    detail.id_format) <= event.high_age
    AND (event.eligible_gender IS NULL
    OR event.eligible_gender = p.gender)))
0
ответ дан Santosh Karna 17 January 2019 в 07:03
поделиться

Если вы хотите проверить какое-то условие (условие AND EXISTS ...), только если выполняется какое-то другое условие (источник - MANUAL), и вы хотите сделать это в одном запросе вместо:

WHERE (...some condition ...) AND (.. some other condition ... )
IF @source != 'MANUAL'
    AND EXISTS (
        SELECT 1 ... )

который не поддерживается, так как это неправильный синтаксис sql, который вы можете сделать:

WHERE (...some condition ...) AND (.. some other condition ... )
    AND (
       (
         (SELECT md.[source] 
          FROM sports_service.meet.meet_detail md 
          WHERE md.meet_id = #{meetId}
         ) = 'MANUAL'
       )
      OR EXISTS (
        SELECT 1 
        FROM ...
      )
    )

Вам нужно проверить, будет ли производительность результирующего запроса удовлетворительной.

Вероятно, было бы лучше выполнить запрос, который сначала получает source, а затем выполнить любой запрос с дополнительным условием или без него в зависимости от значения source. Для этого вы можете сгенерировать запрос в mybatis, используя динамический SQL (включая или исключая это дополнительное условие).

0
ответ дан Roman Konoval 17 January 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: