powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос с бородой: обрезание времени у дат :)
11 сообщений из 11, страница 1 из 1
Вопрос с бородой: обрезание времени у дат :)
    #32026402
ReaperMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые господа SQL профи!
Осмелюсь задать вопрос, с которым наверняка все сталкивались, но вот мне не очень ясен на него ответ.
Банальнейшая ситуация: в одной из таблиц есть поле типа, ну скажем, smalldatetime. Сервер не умеет хранить дату "в отрыве" от времени, а клиентам чаще всего время-то и не нужно. Т.е. наша задача получить в запросе каким-то обрезанием/преобразованием "чистаа дату", без часов/минут/секунд.
Варианты с неиспользованием полей типа (small)datetime не очень катят, ибо часто бывает, что работаешь не со своей, созданной "по своему образу и подобию" базой, а уже с имеющейся с незапамятных времен.
Пошастав тут на конфе, наткнулся на пару способов, но все они какие-то некошерные:

1. SELECT Cast( Cast( ПолеТипаДаты as int) as DateTime )
В чем тут лажа:

declare @dt smalldatetime
set @dt = '2001.01.01 20:00'
SELECT Cast( Cast( @dt as int) as DateTime )

Округление, блин...

2. Convert(datetime, convert(char(8 ), ПолеТипаДата, 2))
Тут уже может случиться лажа с настройками set dateformat, ибо от него тут преобразрование все-таки зависит, поскольку сначала мы конвертим в строку по жестко заданному нами формату, а потом обратно отдаем все на откуп тому, который установлен на серваке.

А хотелось бы получить железобетонный способ, гарантирующий правильную и однозначную интерпретацию даты в символьную строку и обратно. Единственный способ, сразу приходящий в голову, это
Cast(DateName(Day, dt) + ' ' + DateName(Month, dt) + ' ' + DateName(Year, dt) as smalldatetime)
Тут фишка в том, что "вумный" сервер не спутает день с месяцем по причине написания второго "в словесной форме". Но уж больно многословное получилось преобразование...
Кто как приводит дату "в божеский вид"?
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32026405
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
declare @dt smalldatetime
set @dt = '20010228 20:00'
set dateformat dmy
SELECT Convert(datetime, convert(char(8 ), @dt, 2)), @dt, Convert(datetime, convert(char(8 ), @dt, 112 ))

PS
И вообще символьное представлении даты в виде yyyymmdd hh:mm:ss ВСЕГДА интерпретировалось сервером в правльную дату независимо от региональных установок клиента и сервера (по крайней мере на моей памяти)
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32026415
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT Cast( FLOOR( cast(@dt as float)) as DateTime )
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32027836
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(ничего не понимаю)
а это разве не работает: convert(char(10),ВашаДата,104) ???
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32027902
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает исп-ть типы DATE и TIME?
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32027919
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
их отсутствие
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32027956
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый загадочный для меня постинг!!!
Чем плохо: convert(char(10),ВашаДата,104)
и наоборот: convert(smalldatetime,ВашеПолеТипаChar(10),104) ???

И причем здесь региональные настройки ???
Короче, объясните или кончайте шутки шутить!!!
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32027978
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2RatTail

declare @dt char(10)
set @dt = '20010131'
select convert(smalldatetime, @dt, 104)
GO

declare @dt char(10)
set @dt = '2001.01.31'
select convert(smalldatetime, @dt, 104)
GO
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32028031
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Glory
В первом случае вообще не надо указывать стиль.
Стиль 104 предполагает написание: 17.04.2002, а не 2001.01.31
В чем задача? Написать 2002.02.03 и заставить сервер ДОГАДАТЬСЯ, что речь идёт о 2 марта,
а не о 3 февраля(или наоборот)???????????????????????????
Это слишком круто для моего Крысиного Хвоста...
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32028078
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SergSuper
Виноват, добавим Еще пожелания?
...
Рейтинг: 0 / 0
Вопрос с бородой: обрезание времени у дат :)
    #32028090
Alexshell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так режу
select convert(varchar(12),FieldDateTime,4) from YOURTable
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос с бородой: обрезание времени у дат :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]