Обновление года? - PullRequest
       2

Обновление года?

3 голосов
/ 17 февраля 2010

Использование sql server 2000

Дата Столбец типа данных varchar

Table1

ID Date 

01 20100122
01 20100123
01 20100124
01 20100125
01 20100126
01 20090127
01 20090128
01 20090129
01 20090130
01 20090131
01 20090201
01 20100202
01 20090203
01 20100204
01 20100205
02 
.....

Из таблицы выше, с 26 января по 03 февраля, год показывался неверным для всех идентификаторов

Я хочу обновить только 2010 год вместо 2009, например 20100127 вместо 20000127

Ожидаемый выход

ID Date

01 20100126
01 20100127
...
01 20100203
...
02

Запрос как

update table1 set 2010 instead of 2009 where date between 20090126 and 20090203

Как сделать запрос на обновление значений.

Требуется справка

Ответы [ 4 ]

1 голос
/ 17 февраля 2010

лучший подход, избегает замены 20 сентября

UPDATE Table1 Set Date = Replace(Date, '2009', '2010') WHERE DATE LIKE '2009%'
1 голос
/ 17 февраля 2010
UPDATE Table1 
SET Date = Replace(Date, '2009', '2010') 
WHERE 
    DATE LIKE '2009%' 
AND
    convert(DATETIME, Date, 112) BETWEEN '2009-01-26 00:00:00' AND 
                                         '2009-02-03 23:59:59.999'
1 голос
/ 17 февраля 2010

Если столбец имеет тип DATETIME, посмотрите на DATEADD

SELECT GETDATE(),  DATEADD(year, 1, GETDATE())

Для VARCHAR вы можете попробовать что-то вроде

DECLARE @Table TABLE(
        Date VARCHAR(8)
)

INSERT INTO @Table SELECT '20090301'

SELECT  *
FROM    @Table

UPDATE  @Table
SET     Date = '2010' + RIGHT(Date, 4)
WHERE   LEFT(Date,4) = '2009'

SELECT *
FROM    @Table

ИЛИ что-то вроде

DECLARE @Table TABLE(
        ID VARCHAR(4),
        Date VARCHAR(8)
)

INSERT INTO @Table SELECT '01','20100122'
INSERT INTO @Table SELECT '01','20100123' 
INSERT INTO @Table SELECT '01','20100124' 
INSERT INTO @Table SELECT '01','20100125' 
INSERT INTO @Table SELECT '01','20100126' 
INSERT INTO @Table SELECT '01','20090127' 
INSERT INTO @Table SELECT '01','20090128' 
INSERT INTO @Table SELECT '01','20090129' 
INSERT INTO @Table SELECT '01','20090130' 
INSERT INTO @Table SELECT '01','20090131' 
INSERT INTO @Table SELECT '01','20090201' 
INSERT INTO @Table SELECT '01','20100202' 
INSERT INTO @Table SELECT '01','20090203' 
INSERT INTO @Table SELECT '01','20100204' 
INSERT INTO @Table SELECT '01','20100205' 

UPDATE  @Table
SET     Date = '2010' + RIGHT(Date, 4)
WHERE   Date >= '20090126'
AND     Date <= '20090203'
AND     ID = '01'

SELECT  *
FROM    @Table
0 голосов
/ 17 февраля 2010

Если столбец определен как varchar:

update Table1
set [Date] = '2010' + substring([Date], 5, 4)
where [Date] between '20090126' and '20090203'

Если столбец определен как datetime:

update Table1
set [Date] = convert(datetime, '2010-' + substring([Date], 5, 2) + '-' + substring([Date], 7, 2), 120)
where [Date] between {d'2009-01-26'} and {d'2009-02-03'}

Примечания:

  • Хотя синтаксис {d'yyyy-mm-dd'} не является допустимым T-SQL, тем не менее он правильно перехватывается и интерпретируется любым клиентским стеком SQL Server, например ODBC, OLEDB, ADO.NET и т. Д. Это также относится к инструментам интерактивных запросов. Если вам не нравится использовать escape-последовательности ODBC, вместо этого вы можете использовать convert(datetime, 'yyyy-mm-dd', 120).
  • convert(datetime, 'yyyy-mm-dd', 120) применяет стандартный формат даты и времени ODBC, который является инвариантом языка и языка и поэтому очень полезен для построения строк даты и времени независимо от текущей локали сервера.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...