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

Откуда: ☭
Сообщений: 72991
Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
Apr 20 2015 17:29:27
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Если выполнить

create table #t (n int identity(1,1), f varchar(8000))
set @cmd = 'dir \\шара\*.* /a:-d-h-s /-c '
insert #t exec master..xp_cmdshell @cmd
из-под mssql
и

dir \\шара\*.* /a:-d-h-s /-c

в консоли cmd (и если просто открыть папку), то возвращаются разные даты, mssql возвращает 08.07.2015, cmd - 07.08.2015

почему так и как привести к единому виду?
22 июл 16, 11:41    [19440432]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Antonariy,

дата одна, формат разный. Приведите к одному
22 июл 16, 11:43    [19440451]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
TaPaK
Antonariy,

дата одна, формат разный.
спасибо, кэп

TaPaK
Приведите к одному
как?
22 июл 16, 11:49    [19440480]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Antonariy
как?
SET DATEFORMAT

Региональные настройки сервера не совпадают с параметрами соединения.
22 июл 16, 11:52    [19440509]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
iap
Antonariy
как?
SET DATEFORMAT
а это в контексте соединения работает или сервера вообще?
22 июл 16, 12:11    [19440640]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Илья_1985
Member

Откуда:
Сообщений: 7
Antonariy, по мне проще распарсить строку и поменять в ней формат даты.
22 июл 16, 12:16    [19440673]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Илья_1985
Antonariy, по мне проще распарсить строку и поменять в ней формат даты.
нет никакой гарантии, что на другом сервере формат даты не будет другим.
22 июл 16, 12:17    [19440680]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Илья_1985
Antonariy, по мне проще распарсить строку и поменять в ней формат даты.

конечно, главное что бы на другом сервере с другой регионалкой не запускать

автор
в контексте соединения работает
22 июл 16, 12:18    [19440687]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
aleks2
Guest
Antonariy
iap
пропущено...
SET DATEFORMAT
а это в контексте соединения работает или сервера вообще?

Какой, нафиг, SET DATEFORMAT для dir?

Поставьте Regional Setting одинаковыми для учеток.
Чтобы выяснить для каких - выполните
master..xp_cmdshell 'set user'
22 июл 16, 12:18    [19440688]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Antonariy
iap
пропущено...
SET DATEFORMAT
а это в контексте соединения работает или сервера вообще?
У сервера есть соответствующая настройка.
Она применяется по-умолчанию.
Но можно выполнить указанную команду в соединении (проще говоря, перед вышеприведённым INSERTом).
При закрытии соединения последствия этой команды будут уничтожены.
Формат даты устанавливается также при установке языка - SET LANGUAGE.
22 июл 16, 12:21    [19440712]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
aleks2
Antonariy
пропущено...
а это в контексте соединения работает или сервера вообще?

Какой, нафиг, SET DATEFORMAT для dir?

Поставьте Regional Setting одинаковыми для учеток.
Чтобы выяснить для каких - выполните
master..xp_cmdshell 'set user'
Не для дир, а на сервере. Чтобы формат был согласованным.
22 июл 16, 12:23    [19440729]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
aleks2
Antonariy
пропущено...
а это в контексте соединения работает или сервера вообще?

Какой, нафиг, SET DATEFORMAT для dir?

Поставьте Regional Setting одинаковыми для учеток.
Чтобы выяснить для каких - выполните
master..xp_cmdshell 'set user'
учетка одна и та же, trusted connection же
22 июл 16, 12:28    [19440772]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
iap
Member

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

скажите лучше, 7 августа или 8 июля?
22 июл 16, 12:30    [19440792]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Antonariy
учетка одна и та же, trusted connection же
Это вы так считаете.
В документации описано от имени каких учетных записей будет выполняться процесс, запущенный через xp_cmdshell.
22 июл 16, 12:37    [19440851]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

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

скажите лучше, 7 августа или 8 июля?
7 августа
22 июл 16, 12:42    [19440906]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Antonariy
iap
Antonariy,

скажите лучше, 7 августа или 8 июля?
7 августа
Значит, в данном конкретном случае
SET DATEFORMAT DMY;
22 июл 16, 12:43    [19440916]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
invm
Antonariy
учетка одна и та же, trusted connection же
Это вы так считаете.
точно, фигню сморозил.
22 июл 16, 12:46    [19440933]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
iap
Antonariy
пропущено...
7 августа
Значит, в данном конкретном случае
SET DATEFORMAT DMY;
Только это перед получением даты из строкового поля вашей таблицы.
Про INSERT я фигню сморозил. Потому что в таблицу же просто записывается строка без изменений.
22 июл 16, 12:49    [19440958]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
iap
Antonariy
пропущено...
7 августа
Значит, в данном конкретном случае
SET DATEFORMAT DMY;
не помогло

08.07.2015 16:12 15504 ТДД15531.jpg
22 июл 16, 12:53    [19440990]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
iap
iap
пропущено...
Значит, в данном конкретном случае
SET DATEFORMAT DMY;
Только это перед получением даты из строкового поля вашей таблицы.
Про INSERT я фигню сморозил. Потому что в таблицу же просто записывается строка без изменений.
из #t я данные вообще вот так дербаню:
	select	convert(datetime,substring(f,1,17)+':00', 104) date, 
			cast(ltrim(substring(f,18,18)) as int) size, 
			substring(f,37,len(f)) name,
			f
	from #t 
	where n between 6 and (select count(*) from #t) - 3
тут проблем нет

проблема в том, что в #t кривая дата попадает.
половина файлов с нормальной датой (где месяц с числом перепутать невозможно, типа 28.08.2015), половина с кривой.
22 июл 16, 12:59    [19441030]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Antonariy
invm
пропущено...
Это вы так считаете.
точно, фигню сморозил.
xp_cmdshell 'set user' выдал того же юзера, под которым cmd запускается.

зашел в настройки юзера (в контроллере домена), в упор не вижу персональных региональных настроек. это вроде бы вообще свойства системы, а не юзера. а система русская.
22 июл 16, 13:08    [19441080]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Владислав Колосов
Member

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

у Вас серверная винда имеет английский GUI, поэтому дата "перевернута".
А CMD Вы запускаете от имени пользователя с русскими установками.
Вы с какой целью каталог читаете из сиквела? Это, в принципе, не серверная задача, тем более удалённый каталог.
22 июл 16, 13:34    [19441287]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Владислав Колосов
Antonariy,

у Вас серверная винда имеет английский GUI, поэтому дата "перевернута".
у нас серверная винда имеет русский гуй.

Владислав Колосов
А CMD Вы запускаете от имени пользователя с русскими установками.
теория региональных настроек никак не объясняет, почему дата перевернута только у тех файлов, где число можно перепутать с месяцем. дат типа 08.24.2015 нет.

Владислав Колосов
Вы с какой целью каталог читаете из сиквела? Это, в принципе, не серверная задача, тем более удалённый каталог.
в ходе экспериментов было обнаружено, что dir, выполненный из mssql, возвращает список из нескольких десятков тысяч файлов практически мгновенно, прочие способы вообще отдыхают. ну и сравнение двух таких списков джойном на предмет изменения файлов тоже рулит и педалит.
22 июл 16, 14:54    [19441851]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
проверил все сервера филиалов, картина нарисовалась как я и предполагал: одни возвращают 08.07, другие 07.08, реальная дата файла везде 07.08.

версии скуля 12.0.2000.8 и 12.0.4100.1, девелопер и экспесс, битность и скуля и винды разная, сами винды тоже разные (6.1, 5.2, 5.1), но все русские, кореляций с датой нет вообще - разные даты могут быть на одинаковых серверах и одинаковые даты на разных серверах.
22 июл 16, 15:41    [19442230]     Ответить | Цитировать Сообщить модератору
 Re: Разные даты в dir  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
все решилось.
проблема была в том, что я тупил. 07.08 и 08.07 это реальные даты, просто неизвестно как дата перевернулась при копировании файлов. а сравнивал я cmd и xp_cmdshell на разных серверах.
22 июл 16, 16:10    [19442523]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить