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

Откуда: азербайджан,баку
Сообщений: 518
declare @new table(
id int not null identity(1,1),
dat char(10))
insert into @new
select'111214'
union
select'121214'
select cast(dat as datetime)from @new



-----------------------
2011-12-14 00:00:00.000
2012-12-14 00:00:00.000


но нужн мне такой результат

2014-12-11
2014-12-12

спасибо всем
26 дек 14, 13:39    [17057088]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
CAST -> CONVERT()
26 дек 14, 13:40    [17057106]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
Maxx
CAST -> CONVERT()


convert мне ничего не дает
26 дек 14, 13:42    [17057117]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
yaxta, в смысле - format().
26 дек 14, 13:54    [17057215]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Почему не дает, кстати? Отрежьте 10 левых символов.
26 дек 14, 13:56    [17057234]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
Владислав Колосов
Почему не дает, кстати? Отрежьте 10 левых символов.


новерно вы думали что я тупой ?

declare @new table(
id int not null identity(1,1),
dat char(10))
insert into @new
select'111214'
union
select'121214'
select convert(dat as datetime)from @new

Сообщение 156, уровень 15, состояние 1, строка 8
Incorrect syntax near the keyword 'as'.
26 дек 14, 13:59    [17057261]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Lanselot
Member

Откуда:
Сообщений: 76
yaxta,
+100500! А синтаксис?
26 дек 14, 14:01    [17057283]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
yaxta
новерно вы думали что я тупой ?

навреное я думаю хватить ума почитать хелп по предложеной ф-ции ?
26 дек 14, 14:20    [17057443]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
BKV88
Member

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

А как сиквел поймет в какое поля вы хотите вставить вашу дату?
26 дек 14, 14:20    [17057444]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
BKV88
Member

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

Вопрос снимается туплю
26 дек 14, 14:22    [17057456]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Maxx
CAST -> CONVERT()

select CONVERT(date , '111214', 112)

Да и вообще хранить даті в таком виде..ето изварт 10й степени
26 дек 14, 14:22    [17057458]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
BKV88
Member

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

Я почему то думал когда используешь insert ... Select надо явно указывать куда чего вставляешь
26 дек 14, 14:23    [17057472]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Maxx
Member [скрыт]

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

Я почему то думал когда используешь insert ... Select надо явно указывать куда чего вставляешь

надо, ето признак как минимум хорошего тона
26 дек 14, 14:24    [17057481]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
Maxx
Maxx
CAST -> CONVERT()

select CONVERT(date , '111214', 112)

Да и вообще хранить даті в таком виде..ето изварт 10й степени



declare @new table(
id int not null identity(1,1),
dat char(10))
insert into @new
select'111214'
union
select'121214'



select CONVERT(date , '111214', 112)

-----------------------------------------------------------------
Сообщение 243, уровень 16, состояние 1, строка 11
Type date is not a defined system type.


у меня скл2000
26 дек 14, 14:33    [17057552]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Мне кажется проблема ТС в том, как интерпретировать ГГММДД.
Автор хочет, чтобы интерпретировалось как: ДДММГГ, но по умолчанию ГГММДД.
За такую интерпретацию символьных строк отвечает SET DATEFORMAT.
Но, как говорится, есть нюанс:
автор
Некоторые форматы символьных строк, например ISO 8601, интерпретируются независимо от значения параметра DATEFORMAT.

А формат ГГММДД это как раз ISO: 12,112 - ISO - 12 = ггммдд, 112 = ггггммдд (http://msdn.microsoft.com/ru-ru/library/ms187928.aspx)
Таким образом, сервер всегда интерпретирует это как ГГММДД.

Так что на мой взгляд, красивого и правильного решения тут нет.
Но в зависимости от ситуации можно действовать по разному, например:
- если ТС имеет влияние на то как пишутся строки - сразу писать их, даже не в нужном формате, а сразу в правильный тип данных;
- если у ТС есть большой массив таких данных, в которых каждая запись отвечает этому формату, нарезать строковыми функциями, переставить - конвертировать - профит
- если есть большая помойка и там может попадаться все что угодно - тогда сначала вычистить данные и выполнить предыдущий пункт
- еще 100500 вариантов в зависимости от...
26 дек 14, 14:34    [17057558]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Lanselot
Member

Откуда:
Сообщений: 76
yaxta, в случае с вашими "полуитальянскими" представлениями дат
declare @new table(
id int not null identity(1,1),
dat char(10))
insert into @new
select'111214'
union
select'121214'
select CONVERT(datetime,SUBSTRING(dat,1,2)+'-'+SUBSTRING(dat,3,2)+'-'+SUBSTRING(dat,5,2),5)from @new
26 дек 14, 14:47    [17057670]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
yaxta
у меня скл2000

ну так поменяйте date->datetime
26 дек 14, 14:48    [17057674]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
yaxta,
>>ковертироват
ковертироватЬ

>>но нужн мне такой результат
но мне нужЕн такой результат


select CONVERT(datetime , '111214', 112)
26 дек 14, 15:14    [17057896]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
StarikNavy
yaxta,
>>ковертироват
ковертироватЬ

>>но нужн мне такой результат
но мне нужЕн такой результат


select CONVERT(datetime , '111214', 112)
И получится 11-й год!
Обсуждали же уже!

'YYYYMMDD' - 8-мисимвольный формат даты без разделителей.
'YYMMDD' - 6-тисимвольный формат даты без разделителей.
'YYYY' - 4-хсимвольный формат даты без разделителей.

Читайте хелп про строковые представления даты-времени.
26 дек 14, 15:26    [17057988]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Кстати, если век в году пропущен, то стиль не 112-й, а 12-й
26 дек 14, 15:26    [17057995]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
Алексей Лисицын
Member

Откуда:
Сообщений: 2
yaxta,
колхоз - дело добровольное, можно так:
declare @new table(
	  id int not null identity(1,1)
	, dat char(10)
);

set dateformat dmy;

insert into @new
values ('111214'), ('121214');

select cast(SUBSTRING(dat,1,2) + '.' + SUBSTRING(dat,3,2) + '.' + SUBSTRING(dat,5,2) as datetime)
from @new;
26 дек 14, 16:50    [17058645]     Ответить | Цитировать Сообщить модератору
 Re: конвертироват  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
iap
И получится 11-й год!
.

приношу извинения. второпях, на 2000м проверил на работоспособность, но не проверил на результат
26 дек 14, 17:43    [17058941]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить