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

Откуда: Украина, Донецк
Сообщений: 61
У меня есть следующая строка (не вдаваясь в подробности)

CAST(CAST(Дата AS CHAR) + CAST(Время AS CHAR) AS Smalldatetime) AS Время_вылета_факт


Оно-то отлично работает.. но возникает резонный вопрос.. нельзя ли сделать проще? (Дата тип Date, Время тип Time)
И возможно ли будет в дальнейшем эту команду использовать в триггере на добавление?
14 дек 12, 15:27    [13632645]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Еще у меня строка Дата это результат работы функции.. это не составит затруднений при присоединении?
14 дек 12, 15:29    [13632664]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
Гость333
Member

Откуда:
Сообщений: 3683
One_question
нельзя ли сделать проще?

Можно. Хранить дату сразу в smalldatetime.
14 дек 12, 15:46    [13632780]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Сделать наоборот:
create table ...
(
 ...
 Время_вылета_факт smalldatetime,
 Дата as cast(Время_вылета_факт as date),
 Время as cast(Время_вылета_факт as time),
 ...
)
14 дек 12, 15:54    [13632871]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
One_question
нельзя ли сделать проще?

Можно. Хранить дату сразу в smalldatetime.

+Под словом "дата" я здесь подразумевал итоговое "Время_вылета_факт", а не поле "Дата" типа date.
14 дек 12, 15:58    [13632915]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
invm,

Дело в том, что у меня дата берется из функции, время из таблицы, а результат должен храниться в другой таблице.. их не получится в одну поместить
14 дек 12, 16:08    [13633021]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Гость333, У меня она уже в smalldatetime... Погодите.. Вы хотите сказать что тут один CAST не нужен?
14 дек 12, 16:09    [13633032]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Гость333, Что-то совсем мозги запудрились... всё работает без второго CAST главное чтобы теперь вторая таблица такую строку приняла как smalldatetime
14 дек 12, 16:15    [13633083]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
Гость333
Member

Откуда:
Сообщений: 3683
One_question
Гость333, У меня она уже в smalldatetime... Погодите.. Вы хотите сказать что тут один CAST не нужен?

Я имел в виду вариант, предложенный invm. Это я не дочитал, что у вас "строка Дата это результат работы функции". Теперь догадываюсь, что вы обрабатываете расписание самолётов, где время вылета для каждого рейса фиксировано и хранится в таблице, а даты вылетов выдаются функцией (типа, один рейс летает каждый день, другой — по чётным числам и т.п.).

Если функция сразу будет выдавать smalldatetime, то можно обойтись без явной конвертации:
declare @Дата smalldatetime = '20121214';
declare @Время time = '16:20';
select @Дата+@Время; -- 2012-12-14 16:20:00


One_question
Еще у меня строка Дата это результат работы функции.. это не составит затруднений при присоединении?

Вполне может составить. Зависит от того, какая функция, в каких запросах она используется, от предполагаемого количества данных и т.п. Исходных данных маловато. Если вкратце, то использование не-inline функций в запросах — это зло.
14 дек 12, 16:30    [13633199]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Вы совершенно правы
Гость333
Расписание самолётов, где время вылета для каждого рейса фиксировано и хранится в таблице, а даты вылетов выдаются функцией (типа, один рейс летает каждый день, другой — по чётным числам и т.п.).


Если функция будет выдавать smalldatetime, то если не ошибаюсь в этом типе данных еще и время и там будет 00:00:00.
Я думаю может сделать две функции в которых сразу и склеиваться будут эти данные.. только одну для прилетов другую для отлетов.. но вопрос теперь в том, можно ли значения из функции положить в таблицу?
14 дек 12, 16:51    [13633406]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
Гость333
Member

Откуда:
Сообщений: 3683
One_question
Если функция будет выдавать smalldatetime, то если не ошибаюсь в этом типе данных еще и время и там будет 00:00:00.

Будет. А в чём вы здесь видите проблему?

One_question
вопрос теперь в том, можно ли значения из функции положить в таблицу?

Можно.
INSERT Таблица(Столбец1, Столбец2)
SELECT Значение1, dbo.Функция(параметр1, параметр2)
FROM ...

Или что вы имеете в виду?
14 дек 12, 16:59    [13633476]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Гость333, да, именно это!
Прошу прощения за столь глупые вопросы ) С функцией уже всё вышло.

Еще один вопрос. Для того чтобы данные обновлялись каждый раз когда добавляется новое значение в таблицу (желательно чтобы выполнилась функция и добавились результаты в другую таблицу) нужно создавать триггер или хранимую процедуру? Или можно обойтись чем-то проще?
14 дек 12, 17:02    [13633511]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить