Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
Пользуюсь MS SQL Server 2008R2 DeveloperEd.
Итак есть 2 базы данных.

Для одной определен Collation (DB_1)

Ukrainian_CI_AS


Для другой Collation (DB_2)

Cyrillic_Generel_CI_AS


В обеих есть одинаковая табличка, с одним полем типа (tbl_time)

datetime


В которое записываются даты в формате ДД.ММ.ГГГГ
Например передаем дату: 01.06.2012

Тогда в таблице DB_1.dbo.tbl_time

2012-06-01 00:00:00.000


В таблице DB_2.dbo.tbl_time

2012-01-06 00:00:00.000


Соответственно запросы

SELECT DATEPART (mm, DB_1.dbo.tbl_time.time) 

SELECT DATEPART (mm, DB_2.dbo.tbl_time.time) 


Выдают разные резалты - 6 и 1 соответсвенно.
Помогите разобраться.
3 июл 12, 14:06    [12809816]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
https://www.sql.ru/faq/faq_topic.aspx?fid=109
3 июл 12, 14:07    [12809820]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Glory
Member

Откуда:
Сообщений: 104760
zanderman
Соответственно запросы

SELECT DATEPART (mm, DB_1.dbo.tbl_time.time) 

SELECT DATEPART (mm, DB_2.dbo.tbl_time.time) 



Выдают разные резалты - 6 и 1 соответсвенно.

Если оба поля именно типа datetime, то эти запросы выдают одинаковый результат
3 июл 12, 14:10    [12809846]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
Гавриленко Сергей Алексеевич,

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

UPDATE DB_1.dbo.tbl_time
SET DB_1.dbo.tbl_time.time = convert(dateime,DB_1.dbo.tbl_time.time,101)


Потому что мне однозначно нужно перейти к такому отображению даты

И даже если я делаю

SELECT CONVERT(datetime, '20120601', 101) 


Все равно выдает пустой результирующий набор.
3 июл 12, 14:20    [12809922]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Отображением даты занимается клиентское приложение.
3 июл 12, 14:24    [12809959]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
Glory,

 [src]SELECT DATEPART (mm,DB_2.t.time) AS 'Month',t.time from DB_1.dbo.tbl_time t
 ORDER BY t.time


MonthTime
601.06.2012


 SELECT DATEPART (mm,DB_2.t.time) AS 'Month',t.time from DB_2.dbo.tbl_time t
 ORDER BY t.time


MonthTime
106.01.2012
3 июл 12, 14:31    [12810015]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
zanderman, у вас содержатся разные значения (1 июня и 6 января), поэтому и разный результат у DATEPART
3 июл 12, 14:33    [12810037]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Glory
Member

Откуда:
Сообщений: 104760
У вас 2 разные даты. Потому что вы записали в таблицу 2 разные даты.
Потому что вместо параметров используете символьные константы.
3 июл 12, 14:33    [12810046]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
Shakill,

Да, но передавалось изначально в оба поля значение 01.06.2012.
3 июл 12, 14:34    [12810050]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
zanderman,

Еще есть такой нюанс для DB_1, где якобы дата отобразилась правильно.
Чтобы ее вытянуть я пишу такой запрос:

SELECT * FROM DB_1.dbo.time t
WHERE t.time = '06.01.2012'


Хотя в базе дата отображается, как

2012-01-06 00:00:00.000


Потому я совсем запутался.
3 июл 12, 14:38    [12810087]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
tpg
Member

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

Да, но передавалось изначально в оба поля значение 01.06.2012.
Ещё раз - 12809820
3 июл 12, 14:39    [12810093]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
zanderman
Shakill,

Да, но передавалось изначально в оба поля значение 01.06.2012.


как передавалось? и учтите, что настройки сервера влияют на то, как интерпретируется текстовая запись, если передавали текстом
3 июл 12, 14:39    [12810094]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
Shakill,

даты попадали с помощью выгрузки из 1С в формате ДД.ММ.ГГ
3 июл 12, 14:40    [12810106]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
zanderman
Shakill,

даты попадали с помощью выгрузки из 1С в формате ДД.ММ.ГГ


ну либо в одну из баз даты попали неправильно сконвертированные, либо вы думаете что даты должны быть одинаковыми у тех записей, где они на самом деле должны быть разные
3 июл 12, 14:47    [12810189]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
Это отображение на клиенте, с разными настройками
3 июл 12, 14:50    [12810211]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
Anatoly Podgoretsky,

Можно подробней, пожалуйста.
3 июл 12, 14:54    [12810247]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Anatoly Podgoretsky,

ТС утверждает, что у неких двух записей из двух одинаковых таблиц должна стоять одинаковая дата, и, следовательно, одинаковое значение DATEPART(mm, ..), а оно разное. тут дело не в отображении. либо ТС ошибся в выборе самих записей для сопоставления, либо данные повреждены
3 июл 12, 14:57    [12810281]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62917
Если это в одной странице и данные с одного источника, то конечно у автора где то ошибка при записи данных. Например изменение настроек между записями, или разные запросы
3 июл 12, 15:03    [12810342]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
Shakill,

Именно!
Надеялся, что дело в Collation баз.
Или есть четкие правила отображения и хранения дат...

Ответьте мне на такой вопрос, если мне передали дату 01.06.2012 в поле db_1.tbl_time.time(не важно какое)
то как бы не записалась эта дата в БД, результатом запроса

SELECT DATEPART (mm,t.time) from db_1.tbl_time t


будет 6?
3 июл 12, 15:08    [12810385]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
zanderman
И даже если я делаю

SELECT CONVERT(datetime, '20120601', 101) 


Все равно выдает пустой результирующий набор.
'20120601' - это 112-й формат.
CONVERT необязателен - этот формат сервер умеет конвертировать по-умолчанию.

А вот писать '01.06.2012' - неграмотно, ибо зависит от параметров на сервере.
Надо CONVERT(DATETIME,'01.06.2012',104)
3 июл 12, 15:09    [12810394]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
zanderman
Shakill,

Именно!
Надеялся, что дело в Collation баз.
Или есть четкие правила отображения и хранения дат...

Ответьте мне на такой вопрос, если мне передали дату 01.06.2012 в поле db_1.tbl_time.time(не важно какое)
то как бы не записалась эта дата в БД, результатом запроса

SELECT DATEPART (mm,t.time) from db_1.tbl_time t


будет 6?
Передали ведь не дату, а строку?
Значит, зависит от интерпретации этой строки.
3 июл 12, 15:11    [12810411]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
iap,

ну учитывая, что у этой строки тип

datetime


То наверное это все таки дата...
3 июл 12, 15:13    [12810436]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
zanderman
Member

Откуда:
Сообщений: 166
iap
zanderman
И даже если я делаю

SELECT CONVERT(datetime, '20120601', 101) 


Все равно выдает пустой результирующий набор.
'20120601' - это 112-й формат.
CONVERT необязателен - этот формат сервер умеет конвертировать по-умолчанию.

А вот писать '01.06.2012' - неграмотно, ибо зависит от параметров на сервере.
Надо CONVERT(DATETIME,'01.06.2012',104)


Конечно! Согласен с Вами.
Я немогу понять одного почему, чтобы получить одну и ту же дату в одном случае
я пишу запрос
CONVERT(DATETIME,'01.06.2012',104)

а в другом
CONVERT(DATETIME,'06.01.2012',104)
3 июл 12, 15:21    [12810506]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
zanderman
Я немогу понять одного почему, чтобы получить одну и ту же дату в одном случае
я пишу запрос
CONVERT(DATETIME,'01.06.2012',104)

а в другом
CONVERT(DATETIME,'06.01.2012',104)


вы ошибаетесь, в результате этих преобразований получатся разные даты.
3 июл 12, 15:23    [12810520]     Ответить | Цитировать Сообщить модератору
 Re: Порядок отображения D,M,Y в дате  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
zanderman
Ответьте мне на такой вопрос, если мне передали дату 01.06.2012 в поле db_1.tbl_time.time(не важно какое)
то как бы не записалась эта дата в БД, результатом запроса

SELECT DATEPART (mm,t.time) from db_1.tbl_time t

будет 6?


если ваш запрос пытается вставить строку '01.06.2012' в поле datetime, то она будет приведена согласно настройкам сервера к типу datetime или как 1 июня, или как 6 января.
в зависимости от того, какое в итоге значение попало в базу, ваш select datepart(mm, ..) будет возвращать 6 или 1
3 июл 12, 15:36    [12810634]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить