Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Изменение значений в полях


Автор: andrey_pro 17.3.2010, 18:59
Есть таблица T, в ней колонка column
все записи в колонке такого вида: 
'D:\name\title.txt'
'D:\name\body.txt'
и т.д

мне нужно изменить все на такой вид:
'title.txt'
'body.txt'

т.е. убрать 'D:\name\'

как это можно сделать?

Автор: Gluttton 17.3.2010, 19:35
Вариантов много...

Например, мжноо это сделать на стороне клиента. Если мне не изменяет память тот же C++ Builder имеет функцию, которая позволяет из полного пути извлекать имя файла. Думаю, что другие инструменты тоже снабжены чем то подобным.

Ну а если реализовать это средствами DML, то это может выглядеть как-нибудь так:
MS SQL Server 2005
Код

select
    reverse
    (
        substring
        (
            reverse
            (
                column
            ),
            1,
            charindex
            (
                '/', 
                reverse
                (
                    column
                )
            )
        )
    )   as s
from t

Т.е. выбираем перевернутую задом-на-перед (reverse) подстроку (substring) из перевернутого задом-на-перед (reverse) значения с позиции 1 и до той позиции (charindex), которая у символа '/' в перевернутом задом-на-перед (reverse) значении.

Автор: skyboy 17.3.2010, 23:00
если буквально "убрать d:\name" то можно сделать нечто вроде replace(column, "d:\name", "")

Автор: Akina 17.3.2010, 23:06
Если ВЕЗДЕ именно 'D:\name\' и никак иначе - то взять substr с 9-ого символа до конца строки.

Автор: andrey_pro 17.3.2010, 23:50
вот составил запрос на обновление:
UPDATE T Set col = (SELECT RIGHT(col, LEN(col) - InStr(col, '\')) FROM T)


Пишет такое:
  В операции должен использоваться обновляемый запрос.

не понятно как решать.

Автор: Gluttton 18.3.2010, 00:18
Код

select from T

лишнее...

Как то так нужно:
Код

UPDATE T Set col = RIGHT(col, LEN(col) - InStr(col, '\'))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)