SQL Server Использование условия в подстроке - PullRequest
4 голосов
/ 24 февраля 2011

У меня есть поле данных, которое состоит из таких номеров счетов, как это

16530907-00
16530907-0001

16589553-00
16589553-00

Я хочу выбрать все справа от дефиса, затем, если Длина этой подстроки> 2, я хочу обновить это поле и установить его себе минус две дополнительные цифры справа.

Я занимаюсь с отборным утверждением

Select SUBSTRING(Account, CHARINDEX('-'), Account)+1, LEN(Account) as test
FROM Documents
WHERE SubmissionID=45925 and LEN(test)>2

Это не работает. Что я действительно хочу сделать, так это создать оператор обновления, который проверяет символы справа от дефиса, если имеется более 2 символов, а затем усекает любые дополнительные символы.

Любые предложения будут оценены. Спасибо

Ответы [ 4 ]

2 голосов
/ 25 февраля 2011

Спасибо всем за их комментарии и предложения. Я использовал кое-что из того, что было здесь, чтобы найти решение, которое, я думаю, будет хорошо для меня. Вот оно.

Update Documents
Set Acount=LEFT(Account,Len(Account)-2)
WHERE Submid=41632 AND Account LIKE '%-____'

(Спасибо @Richard за этот последний бит! ')

2 голосов
/ 24 февраля 2011

Вы можете использовать Общее табличное выражение , если вы используете SQL Server 2005 или более позднюю версию.

WITH CTE
AS
    (
    SELECT Account 
        , CHARINDEX('-', Account) AS [Dash Index]
        , CASE 
            WHEN CHARINDEX('-', Account)+2 > 2
                THEN CHARINDEX('-', Account)+2
            ELSE LEN(Account)
          END AS [Acceptable Length]
        , LEN(Account) AS [Total Length]
    FROM Documents
    )
UPDATE CTE
SET Account = SUBSTRING(Account, 1, [Acceptable Length])
WHERE [Total Length] <> [Acceptable Length]
2 голосов
/ 24 февраля 2011
UPDATE Documents
SET Account = STUFF(Account, CharIndex('-', Account)+3, 1000, '')
where SubmissionID=45925 AND Account like '%-___%'
2 голосов
/ 24 февраля 2011

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

Select SUBSTRING(Account,0,CHARINDEX('-',Account)+3) as UpdatedAccount, Account
FROM Documents 
WHERE SubmissionID=45925 
and LEN(SUBSTRING(Account, CHARINDEX('-',Account)+1,LEN(Account)) ) > 2
AND CHARINDEX('-',Account) > 0

Это ужасно, но, кажется, делай, что хочешь

Ваше обновление будет выглядеть так:

UPDATE Documents
SET Account = SUBSTRING(Account,0,CHARINDEX('-',Account)+3)
WHERE SubmissionID=45925 
and LEN(SUBSTRING(Account, CHARINDEX('-',Account)+1,LEN(Account)) ) > 2
AND CHARINDEX('-',Account) > 0

UPDATE:

Добавлено в проверку на отсутствие сценариев дефиса, чтобы вы не проходили без каких-либо причин. Тем не менее, я бы порекомендовал пойти с решением @Richards. Это намного красивее.

...