sql — Как получить DATE из строки без разделителей?
Есть строка такого формата 20140102125832
.
Как наиболее идиоматично красиво получить тип DATE
из этой строки?
Ввод: 20140102125832
Вывод: 2014-01-02 12:58:32
- sql
- oracle
- datetime
with str (val) as ( select '20140102125832' from dual), dt (val) as ( select cast (str.val as date, 'yyyymmddhh34miss') from str) select to_char (dt.val, 'yyyy-mm-dd hh34:mi:ss') str, dump (dt.val, 16) dump from dt / STR DUMP ------------------- -------------------------------- 2014-01-02 12:58:32 Typ=13 Len=8: de,7,1,2,c,3a,20,0
Не следует забывать, что колонка с типом date
в результате выборки может быть в клиенте неявно преобразована обратно в символьный вид, в соответствии с параметром сессии, который можно узнать так:
select * from nls_session_parameters where parameter='NLS_DATE_FORMAT' / PARAMETER VALUE ------------------------------ -------------------------------- NLS_DATE_FORMAT YYYY-MM-DD Hh34:MI:SS
Чтобы избежать неявного преобразования, следует в выборке, используя функцию to_char
, явно преобразовать обратно в символьный вид.
на клиенте стоял другой формат даты, поэтому показывало при выборке дату без времени, можно изменить формат на клиенте навсегда или на одну сессию
select to_date('20140102125832', 'YYYY-MM-DD Hh34:MI:SS') as dt from dual;
результат: 2014-01-02 12:58:32
формат поменял на одну сессию:
alter session set nls_date_format = 'YYYY-MM-DD Hh34:MI:SS';
2
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Как вывести дату без времени(21.
01.2002) а не 21.01.2002 18:00:00← →
vasilly
(2002-08-02 17:36) [0]
Как вывести дату без времени(21.01.2002) а не 21.01.2002 18:00:00
проблема в том что пользователь не должен видеть время…!
кто знает?
← →
Кулюкин Олег
(2002-08-02 17:46) [1]
Воспользуйтесь функцией FormatDateTime
Format = «dd.mm.yyyy»
← →
[email protected]
(2002-08-02 17:47) [2]
Где надо вывести дату?
Если в Grid-e, то в нем можно задать для полей формат вывода.
напр:
Label1. Caption:= FormatDateTime(«dd.mm.yy»,quTemp1.FieldByName(«dat»).AsDateTime))
← →
vasilly
(2002-08-02 17:59) [3]
нет вывести надо в датасет… просто
как сделать в гриде я знаю… волпрос скорее по SQL…
потому что сервер MSSQL7 в частности не дает выкинуть дату без времени
←
vasilly (2002-08-02 18:01) [4]
причем еще один момент… нельзя использовать
convert(varchar(10), RegDate,104) AS [Дата ч.]
← →
vasilly
(2002-08-02 18:03) [5]
вопрос скорее по типам данных… насколько мне известно в MSSQL нет типа date, который например есть в IB. ..
нужно сделать вид который бы выкидавал урезаную дату и понимал ее как дату а не как например строку
← →
[email protected]
(2002-08-02 18:23) [6]
>vasilly © (02.08.02 17:59)
>вывести надо в датасет
тогда твой вопрос должен звучать по другому:
как через SELECT выбрать чистую дату откинув время.
← →
[email protected]
(2002-08-02 18:26) [7]
тогда тебе без CONVERTa не обойтись :(
или другие извраты 🙂
sniknik (2002-08-02 19:48) [8]
так ты ее и сохраняй так как нужно она так и выдаватся будет
—в памяти
DECLARE @datevar datetime
SET @datevar = «12/31/98″
SELECT @datevar
—в таблицу
declare @D Datetime
set @D=»12/12/02″
INSERT INTO CASHSAIL ([DATE]) VALUES (@D)
GO
—показать
SELECT * FROM CASHSAIL
именно дата и именно без времени.
поле DATE здесь smalldatetime, в дельфих видится как ftDateTime. и работает именно так как тебе хочется.
← →
Luchkin
(2002-08-05 15:56) [9]
недавно столкнулся с той-же фигнёй. Вот к чему пришёл:
SELECT
Adres,
CAST(CAST(Data AS INTEGER) AS smalldatetime) AS DATA,
Kod, Comment
FROM HISTORY
вроде работает… и не тормозит.
← →
Luchkin
(2002-08-05 16:26) [10]
Ма-а-а-аленькое примечание: если полная дата со временем после полудня, то округлённая дата будет на день больше 🙁
← →
sniknik
(2002-08-05 17:04) [11]
ну это то легко решить
DECLARE @DATE DATETIME
SET @DATE=GETDATE()
SELECT CAST(ROUND(CAST(@DATE AS FLOAT), 0, 1) as smalldatetime)
будет и после полудня нормально давать :-).
понимать правильно!
← →
3JIA9I CyKA
(
convert(datetime, substring(convert(binary(8), GetDate()), 1, 4)+0x00000000)
← →
3JIA9I CyKA
(2002-08-05 17:37) [13]
Это было «получить только дату»
вывести — это так:
convert(varchar(10), GetDate(), 104)
← →
Juve
(2002-08-06 00:15) [14]
Народ, ну во-первых FormatDateTime……а во вторых можно небольшой изврат:
StrToDate(DateTimeToStr(Реальная дата))
← →
3JIA9I CyKA
(2002-08-06 11:06) [15]
Ответ на этот вопрос зависит от того, на какой стороне (C/S) это надо сделать.
sql server — Как выбрать дату без времени в SQL
спросил
Изменено 3 месяца назад
Просмотрено 889 тысяч раз
Когда я выбираю дату в SQL, она возвращается как 2011-02-25 21:17:33.933
. Но мне нужна только часть даты, то есть 25.02.2011
. Как я могу это сделать?
- sql
- sql-сервер
- sql-сервер-2005
4
Для SQL Server 2008:
Convert(date, getdate())
См. https://learn.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql
7
Я думаю, он хочет строку.
выберите convert(varchar(10), '2011-02-25 21:17:33. 933', 120)
120 здесь сообщает функции convert, что мы передаем дату ввода в следующем формате: yyyy-mm-dd hh:mi:ss
.
4
Использование CAST(GETDATE() As Date)
сработало для меня
3
Самый быстрый datediff
, например.
выберите dateadd(d, datediff(d,0, [datecolumn]), 0), другое.. из таблицы
Но если вам нужно использовать только значение, вы можете пропустить добавление даты, например.
выбрать ... ГДЕ некоторая дата <= datediff(d, 0, getdate())
, где выражения datediff(d, 0, getdate())
достаточно, чтобы вернуть текущую дату без части времени.
1
БРОСОК( ПОЛ( CAST(GETDATE() AS FLOAT) ) КАК ДАТАВРЕМЯ )
http://www.bennadel. com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm
2
Для более старой версии 2008 года :
ВЫБЕРИТЕ ДАТУДОБАВИТЬ(ДЕНЬ, РАЗНИЦА ДАТЫ(ДЕНЬ, 0, ПОЛУЧИТЬДАТУ()), 0)
1
вы можете использовать так
SELECT Convert(varchar(10), GETDATE(),120)
1
Если вам нужно, чтобы время было равно нулю, например, 2018-01-17 00:00:00.000
:
ВЫБРАТЬ ПРЕОБРАЗОВАТЬ(ДАТАВРЕМЯ, ПРЕОБРАЗОВАТЬ(ДАТА, ПОЛУЧИТЬДАТА()), 121)
1
Я бы использовал функцию DATEFROMPARTS. Это довольно просто, и вам не нужен кастинг. Например, этот запрос:
Выберите DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE())) as myNewDate
вернет
21. 01.2021
Хорошая часть, вы также можете создать свою собственную дату, например, вы хотите, чтобы первый день месяца был датой, чем вы можете просто использовать, как показано ниже:
Выберите DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) как myNewDate
Результат будет:
01.01.2021
Вы тоже можете попробовать это.
ВЫБРАТЬ ПРЕОБРАЗОВАТЬ(ДАТА, ПОЛУЧИТЬДАТА(), 120)
Слишком поздно, но следующее сработало для меня хорошо
объявлять @vCurrentDate date=getutcdate() выберите @vCurrentDate
Если типом данных является дата, часы будут усечены.
Немного поздно, но используйте функцию ODBC "curdate" (угловые скобки 'fn' - управляющая последовательность функции ODBC).
ВЫБЕРИТЕ {fn curdate()}
Вывод: 01.02.2013
5
Преобразуйте его обратно в дату и время после преобразования в дату, чтобы при необходимости сохранить то же время данных
выберите Convert (datetime, Convert (date, getdate ()) )
Если вы хотите вернуть тип даты как просто дату, используйте
CONVERT(date, SYSDATETIME())
или
SELECT CONVERT(дата,SYSDATETIME())
или
DECLARE @DateOnly Datetime УСТАНОВИТЬ @DateOnly=CONVERT(дата,SYSDATETIME())
Использовать просто:
конвертировать(дата, Btch_Time)
Пример ниже:
Таблица:
Efft_d Loan_I Loan_Purp_Type_C Orig_LTV Curr_LTV Schd_LTV Un_drwn_Bal_a Btch_Time Strm_I Btch_Ins_I 2014-05-31 200312500 HL03 NULL 1,0000 1,0000 1,0000 2014-06-17 11:10:57. 330 1005 24851e0a-53983699-14б4-69109
Выберите * из helios.dbo.CBA_SRD_Loan, где Loan_I в ('200312500') и конвертируйте (дата, Btch_Time) = '2014-06-17'
выберите ДАТУ (поле) из таблицы;
значение поля: 2020-12-15 12:19:00
выберите значение: 2020-12-15
1
В PLSQL вы можете использовать
to_char(SYSDATE,'dd/mm/yyyy')
2
Сначала преобразовать дату в число с плавающей запятой (отображает числовое), затем ROUND
числовое значение до 0 десятичных знаков, а затем преобразовать его в дату и время.
convert(datetime,round(convert(float,orderdate,101),0),101)
1
Попробуйте это.
ВЫБЕРИТЕ ДАТУДОБАВИТЬ(ДД, 0, РАЗНИЦА ДАТЫ(ДД, 0, ПОЛУЧИТЬДАТУ()))
Я бы создал скалярную функцию и использовал бы format() для установки типа данных, который вы хотите видеть. Это должно быть легко в обслуживании позже.
1
Личный фаворит:
выберите convert(datetime, convert(int, getdate()))
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
получить дату без времени на сервере sql
Sql Server, Советы/рекомендацииDATE, Дата только из DateTime, Только часть даты, Только часть даты из DateTime, DATETIME, получить дату без времени на сервере sql, Sql, sql получить дату без времени, Sql ServerBasavaraj Biradar
Много раз мы сталкивались со сценарием, когда нам нужно получить часть даты только из даты и времени на сервере Sql. Есть несколько способов сделать это, здесь я перечисляю некоторые из них:
1) Нижеприведенный подход работает в Sql Server 2008 и выше:
SELECT CONVERT (DATE, GETDATE()) 'Date Part Only' РЕЗУЛЬТАТ: Только часть даты -------------- 2013-07-14
2) Нижеприведенные подходы работают во всех версиях сервера Sql
i) Получить часть даты только из DateTime с помощью функции CONVERT
Пример 1:
SELECT CONVERT(VARCHAR(10), GETDATE(), 112) 'Только часть даты' РЕЗУЛЬТАТ: Только часть даты -------------- 20130714
Пример 2:
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) 'Только часть даты' РЕЗУЛЬТАТ: Только часть даты -------------- 14. 07.2013
Результаты приведенного выше запроса имеют тип VARCHAR. Если мы хотим, чтобы результат имел тип DATETIME, мы можем написать запрос, как показано ниже:
Пример 1:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 112)) 'Только часть даты' РЕЗУЛЬТАТ: Только часть даты ----------------------- 2013-07-14 00:00:00.000
Пример 2:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 111)) 'Только часть даты' РЕЗУЛЬТАТ: Только часть даты ----------------------- 2013-07-14 00:00:00.000
ii) Получить часть даты только из DateTime с помощью функций DateTime
С точки зрения производительности это лучший подход вместо того, чтобы сначала преобразовывать DATETIME в VARCHAR, а затем VARCHAR в DATETIME.
Пример 1:
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 'Только часть даты' РЕЗУЛЬТАТ: Только часть даты ----------------------- 2013-07-14 00:00:00. 000
Пример 2:
DECLARE @DatePartOnly DATETIME SEt @DatePartOnly = DATEDIFF(DD, 0, GETDATE()) SELECT @DatePartOnly 'Только часть даты' РЕЗУЛЬТАТ: Только часть даты ----------------------- 2013-07-14 00:00:00.000
iii) Получить часть даты только из DateTime с помощью функций FLOOR и CAST
Как мы знаем, Sql Server внутренне хранит DATETIME как два 4-байтовых целых числа. Первые 4 байта хранят количество дней, прошедших с даты начала типа DATETIME SQL Server 19.000101. Вторые 4 байта хранят время суток, т. е. часы с полуночи. Каждый такт часов эквивалентен 3,33 миллисекундам.
Таким образом, с указанными выше внутренними хранилищами DATETIME мы можем сначала преобразовать DATETIME в DECIMAL, затем из десятичной части игнорировать дробную часть и получить только целую часть. Наконец, преобразуйте целое число в DATETIME, как показано ниже:
SELECT CAST( -- Преобразуйте целое число в DATE FLOOR(-- Получить наибольшее целое число, меньшее или равное десятичному значению CAST(GETDATE() AS DECIMAL(12, 5)) -- Преобразование DATETIME в DECIMAL ) AS DATETIME) «Только часть даты» РЕЗУЛЬТАТ: Только часть даты ----------------------- 2013-07-14 00:00:00.