Вопрос команды обновления SQL Server - PullRequest
0 голосов
/ 24 декабря 2009

Я использую SQL Server 2000, и мне нужно обновить таблицу.

одна из проблем - как обновить какую-то часть столбца?

например: вот две таблицы, одна это OrderDate и ShipName и

я хочу изменить значение Date в OrderDate, например, за весь 1996 год по 1999 год и

все 'Tom' в ShipName в значение 'ken'

OrderDate    ShipName                          
1996-07-04   Vins et alcools tom         
1996-07-05   Toms Spezialitaten                
1996-07-08   Hanari tom
1996-07-08   Victuailles en tom             
1996-07-09   Supremes tom                  
1996-07-10   Hanari tom                    

так что я хочу, чтобы результат был

OrderDate    ShipName                          
1999-07-04   Vins et alcools ken         
1999-07-05   Toms Spezialitaten                
1999-07-08   Hanari ken
1999-07-08   Victuailles en ken             
1999-07-09   Supremes ken            
1999-07-10   Hanari ken 

спасибо заранее. если кто-нибудь поможет мне очень ценить!

Ответы [ 3 ]

3 голосов
/ 24 декабря 2009

Чтобы обновить дату заказа, попробуйте что-то вроде обновить набор таблиц orderdate = dateadd (year, 3, orderdate)

чтобы обновить имя корабля, которое вы можете попробовать обновить таблицу set shipname = replace (имя корабля, "том", "кен")

2 голосов
/ 24 декабря 2009

Простое использование функции замены SQL Server на Tom приведет к следующему:

Корректное

«что-то Том» становится «чем-то» кен '

Некорректное

«Томс что-то» становится «кенс» что-то '

Для такого рода замены строк (только замена тома на кен, а не томов на кенс) вам понадобится регулярное выражение.

SQL Server не поддерживает регулярные выражения на языке t-sql.

В SQL Server 2005 и выше вы можете интегрировать регулярные выражения с помощью интеграции clr, но я бы лично сказал, что это очень плохая идея. Для такого рода обновлений, вероятно, наиболее чистым является выполнение манипуляции со строками на более выразительном языке, а затем отправка обновлений после внесения изменений.

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

update TableName
set ShipName = substring(ShipName, 0, len(ShipName) -3) + ' ken'
where ShipName like '% tom'

Это заменит все экземпляры тома в конце на кен.

Для части даты вашего вопроса вы можете сделать что-то вроде следующего:

Update TableName
set OrderDate = dateadd(year, 3, OrderDate)
where datepart(year, OrderDate) = 1996
1 голос
/ 24 декабря 2009

Попробуйте использовать ключевое слово REPLACE: http://msdn.microsoft.com/en-us/library/ms186862.aspx Вам также может помочь ключевое слово SUBSTRING: http://msdn.microsoft.com/en-us/library/aa259342%28SQL.80%29.aspx

На примере вашего корабля:

UPDATE Table1

SET ShipName = REPLACE(table1.ShipName,tom, ken)

WHERE Some_Column = Some_Value

Надеюсь, это поможет вам начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...