Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с датами при переходе на 2008R2  [new]
chamanakol
Member

Откуда:
Сообщений: 52
Пришлось на 2008R2 восстанавливать базу с бэкапа от накрывшегося 2005-го.
даты были в ymd-формате

щас сервер их как-то по своему понимает:
те которые пришли с бэкапа он воспринимает как ymd
те, которые сейчас приходят с клиентов обрабатывает как ydm


как бы по-быстрому избавиться от этой проблемы
переписывать кучу хранимых процедур или лезть в исходники клиентов - нереально

что можно сделать на уровне сервера?
8 авг 11, 09:03    [11083762]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/faq/faq_topic.aspx?fid=109
8 авг 11, 09:04    [11083765]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
chamanakol
Member

Откуда:
Сообщений: 52
tpg,
как все даты переконвертировать в 'YYYYMMDD' ?
8 авг 11, 09:09    [11083777]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
chamanakol
tpg,
как все даты переконвертировать в 'YYYYMMDD' ?

Вы уверены, что вам все даты нужно преобразовывать? Ведь вы сами говорили - сейчас у вас мешанина дат.
В любом случае, для преобразовывания - разбираете дату как строку и собираете ее заново. Получившимся результатом - апдейтите таблицу. Пример:
SELECT t.*, ISDATE(t.td_add1day_res) [ISDATE_RES]
FROM (
SELECT  t.td_add1day,
        t.s1,
        t.s2,
        STUFF(STUFF(t.td_add1day,6,2,t.s2),9,2,t.s1) td_add1day_res
FROM    ( SELECT    t.td_add1day,
                    SUBSTRING(t.td_add1day, 6, 2) s1,
                    SUBSTRING(t.td_add1day, 9, 2) s2
          FROM      ( SELECT    CONVERT(VARCHAR(50), DATEADD(day, 1, GETDATE()), 127) td_add1day
                    ) t
        ) t
) t
8 авг 11, 09:26    [11083805]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
chamanakol
Member

Откуда:
Сообщений: 52
kDnZP,
апдейтить таблицы может действительно придётся
по крайней мере есть время Ч - время когда был поднят бэкап

НО, там же триггеры всякие понацепляны , да ещё и в клиенты данные уходили в старом формате и возможно в клиентах как-то обрабатывались, т.е. проблем можно огрести кучу

блин, записи дат внешне выглядят одинаково, а запросы работают с учётом что записи до времени Ч и после отличаются как-то. мешанина
8 авг 11, 09:36    [11083820]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
chamanakol,

вы ФАК внимательно прочитали? Упоминание про язык который используется для логина видели?
8 авг 11, 09:43    [11083835]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
tpg
chamanakol,

вы ФАК внимательно прочитали? Упоминание про язык который используется для логина видели?



И всёже скрипт создания таблицы хотеось бы видеть. Странно, это, дату писать в строковое поле.
8 авг 11, 09:45    [11083841]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
chamanakol
Member

Откуда:
Сообщений: 52
Ken@t,
CREATE TABLE [dbo].[ЖурналТабУчета](
	[IDЖурналТабУчета] [int] IDENTITY(1,1) NOT NULL,
	[ТабНомер] [int] NOT NULL,
	[ВремяС] [smalldatetime] NOT NULL,
	[ВремяДо] [smalldatetime] NOT NULL,
	[Перерыв] [smalldatetime] NOT NULL,
	[ТалонУвольнительная] [bit] NOT NULL,
	[Аннулировано] [bit] NOT NULL,
	[Дата] [smalldatetime] NULL,
	[Табельщик] [int] NULL
) ON [PRIMARY]

например, запрос
SELECT [IDЖурналТабУчета]
      ,[ТабНомер]
      ,[ВремяС]
      ,[ВремяДо]
      ,[Перерыв]
      ,[ТалонУвольнительная]
      ,[Аннулировано]
      ,[Дата]
      ,[Табельщик]
  FROM [Start].[dbo].[ЖурналТабУчета]
where [Дата]>'2011-01-08 00:00:00'
and [ТабНомер]=4056
возвращяет 9 строк,
а запрос:

declare @TabNum int
declare @Month smalldatetime

set @TabNum=4056
set @Month='2011-08-08 00:00:00'

select
a.ВремяС as Дата
,a.ВремяС
,a.ВремяДо
,a.ВремяДо - a.ВремяС - a.Перерыв as Часы
,a.ТалонУвольнительная
,a.Аннулировано
,a.Дата as ДатаЗаписи
,b.Фамилия+' '+Left(b.Имя,1)+'.'+Left(b.Отчество,1)+'.' as Табельщик
,a.IDЖурналТабУчета
,a.ВремяДо - a.ВремяС as Разница
,case when c.Дата is null then 0 else 1 end as Выходной
from dbo.ЖурналТабУчета a 
left join dbo.Сотрудники b on a.Табельщик = b.ТабНомер
left join dbo.Выходные c on c.Дата=(Datename(year, a.ВремяС) + ' ' + Datename(month, a.ВремяС)+ ' ' + Datename(day, a.ВремяС))
where a.ТабНомер = @TabNum
 and Datename(year, a.ВремяС) + ' ' + Datename(month, a.ВремяС)
= Datename(year, @Month) + ' ' + Datename(month, @Month)

возвращает только 4 строки до времени Ч
8 авг 11, 10:01    [11083900]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
chamanakol,

поскольку все даты у Вас типа SMALLDATETIME,
то у них нет никакого формата ymd или 'YYYYMMDD',
о которых Вы тут пишете. Ваша проблема надуманна! Её не существует!
8 авг 11, 10:08    [11083932]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
chamanakol,

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

для работы с датами есть функции DATEADD , DATEDIFF.


Зы. измените язык пол умолчанию для логинов на English, исправит ситуацию, немного.
8 авг 11, 10:08    [11083935]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
мне кажется, справку по типам данных datetime, smalldatetime, date нужно включать в поставку в бумажном виде.
или в лицензию включить, типа "да, я прочитал и понял. можно я теперь буду использовать?"
8 авг 11, 10:31    [11084041]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Зайцев Фёдор
мне кажется, справку по типам данных datetime, smalldatetime, date нужно включать в поставку в бумажном виде.
или в лицензию включить, типа "да, я прочитал и понял. можно я теперь буду использовать?"

Т.к. ни справку, ни лицензионное соглашение не читают в любом виде, то это не поможет...
8 авг 11, 10:35    [11084071]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
declare @TabNum int
declare @Month smalldatetime

set @TabNum=4056
set @Month='20110808 00:00:00'

select
a.ВремяС as Дата
,a.ВремяС
,a.ВремяДо
,a.ВремяДо - a.ВремяС - a.Перерыв as Часы
,a.ТалонУвольнительная
,a.Аннулировано
,a.Дата as ДатаЗаписи
,b.Фамилия+' '+Left(b.Имя,1)+'.'+Left(b.Отчество,1)+'.' as Табельщик
,a.IDЖурналТабУчета
,a.ВремяДо - a.ВремяС as Разница
,case when c.Дата is null then 0 else 1 end as Выходной
from dbo.ЖурналТабУчета a 
left join dbo.Сотрудники b on a.Табельщик = b.ТабНомер
left join dbo.Выходные c on c.Дата>=CONVERT(CHAR(8),a.ВремяС,112)
where a.ТабНомер = @TabNum
 and a.ВремяС>=DATEADD(MONTH,  DATEDIFF(MONTH,0,@Month),0)
 and a.ВремяС< DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Month),0);
Правильно было бы обеспечить нулевое время в ВремяС и ВремяДо при вставке в таблицу (или сделать вычисляемое поле),
чтобы не делать преобразования в самом запросе.
8 авг 11, 10:39    [11084093]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
chamanakol
Member

Откуда:
Сообщений: 52
Ken@t,
брр-это не то слово. у меня один мат крутится.
дёрнули в выходной, всучили бэкап, на сервак ломаный 2005 ставить нельзя, базу и клиентов делала девочка (пару лет как уволилась), с утра начинают все звонить и капать на мозг, начальству-пох..р : "Надо чтобы работало...", чую отпуск будет зимой...

...логинам english сразу ставил. думал, что на уровне базы с датами что-то можно сделать...

p.s. щас ещё обрадовали: не могут найти исходники :) . дайте пулемёт
8 авг 11, 10:50    [11084176]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Всего то нужен лист бумаги и помахать ручкой.
8 авг 11, 11:17    [11084359]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
chamanakol
Member

Откуда:
Сообщений: 52
ааа! я в шоке:
цитата
if (substring(@InputTime, 13, 1) = ':' and substring(@OutputTime, 13, 1) = ':')
insert into dbo.ЖурналТабУчета
(ТабНомер, ВремяС, ВремяДо, Перерыв, ТалонУвольнительная,  Аннулировано, Дата, Табельщик)
values (@TabNum, cast((substring(@Date, 4, 2) + '/' + substring(@Date, 1, 2) + '/' +
substring(@Date, 7, 5) + 
substring(@InputTime, 12, 4)) as datetime),
cast((substring(@Date, 4, 2) + '/' + substring(@Date, 1, 2) + '/' +
substring(@Date, 7, 5) + 
substring(@OutputTime, 12, 4)) as datetime), 
@NewDinner, @Compensatory, 0, getdate(), @TabelTabNum)
и ещё походу из клиента местами тоже передаёт дату в виде строковой солянки
8 авг 11, 11:23    [11084406]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
chamanakol
Ken@t,


p.s. щас ещё обрадовали: не могут найти исходники :) . дайте пулемёт


Фигня, качайте с мс оценочную версию VS2010 , создавайте проект базы данных и импортируйте БД. Вот и все ваши скрипты под контролем. А можно и в SSMS cгенерить скрипты.
8 авг 11, 11:24    [11084424]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с датами при переходе на 2008R2  [new]
chamanakol
Member

Откуда:
Сообщений: 52
Ken@t
chamanakol
Ken@t,


p.s. щас ещё обрадовали: не могут найти исходники :) . дайте пулемёт


Фигня, качайте с мс оценочную версию VS2010 , создавайте проект базы данных и импортируйте БД. Вот и все ваши скрипты под контролем. А можно и в SSMS cгенерить скрипты.

я под исходниками имел ввиду проектную документацию, функциональную модель, сорцы клиентских приложений, архитектуру классов и т.д.
хорошо, что я похоже не увижу всё это безобразие. мне хватило полюбовальтся ХПшками
пойду выбивать денежку на новый проект.
а щас пока пусть ищут, куда снова поставить 2005 сервер
p.s. ...и кто же эта девочка и где она живёт...
8 авг 11, 11:47    [11084602]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить