Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как лучше преобразовать datetime в int Уникально?  [new]
helloword
Member

Откуда:
Сообщений: 686
Нужно с ключевого поля datetime получить уникальный инт ключ для вьюхи.

declare @D datetime

set @D = '2009-02-09 10:02:06.005'

select
 @D as Дата,
 convert(varchar(23), @D, 121) as vДата

и почему результат вресени в результате запроса не верен? Почему 007 мимлисекунд?
Дата = 2009-02-09 10:02:06.007
vДата = 2009-02-09 10:02:06.007

Пробовал так (но получ не уникально)
cast(@D as int) + DATEPART(hh, @D) + DATEPART(m, @D) + DATEPART(s, @D) + DATEPART(ms, @D)
22 сен 09, 13:06    [7692017]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Читаем хелп

datetime values are rounded to increments of .000, .003, or .007 seconds, as shown in the following table.
22 сен 09, 13:08    [7692025]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
helloword
Member

Откуда:
Сообщений: 686
Glory
Читаем хелп

datetime values are rounded to increments of .000, .003, or .007 seconds, as shown in the following table.

прочитал а уникальность как получить?
22 сен 09, 13:13    [7692061]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
datetime это 8 байт
int это 4 байта
Преобразовать datetime в int невозможно
22 сен 09, 13:13    [7692062]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
helloword
Member

Откуда:
Сообщений: 686
Паганель
datetime это 8 байт
int это 4 байта
Преобразовать datetime в int невозможно


можно bigint?
22 сен 09, 13:16    [7692078]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
helloword
можно bigint?
Зачем Вам ключ? Отличать одну запись от другой?
А по дате/времени Вы их разве не отличите?
Зачем что-то во что-то преобразовывать?
22 сен 09, 13:18    [7692103]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Glory
Member

Откуда:
Сообщений: 104760
helloword
Glory
Читаем хелп

datetime values are rounded to increments of .000, .003, or .007 seconds, as shown in the following table.

прочитал а уникальность как получить?

Ну как-как, генерировать уникальные значения
22 сен 09, 13:23    [7692135]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
helloword
Member

Откуда:
Сообщений: 686
Паганель
helloword
можно bigint?
Зачем Вам ключ? Отличать одну запись от другой?
А по дате/времени Вы их разве не отличите?
Зачем что-то во что-то преобразовывать?


Нужно для сторонего клиента
с одной таблицы сделать две и обединить их по ключу (int или bigint)

Есть канешно вариант с триггерами и таблицей соответствий но я думал можно конвертнуть както)
22 сен 09, 13:23    [7692136]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
А как к datetime прибавить минимальное значение?
22 сен 09, 13:28    [7692180]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
helloword
Нужно для сторонего клиента
с одной таблицы сделать две и обединить их по ключу (int или bigint)
В Вашем тексте первая строчка противоречит второй
Объединять же сервер будет, а не клиент, правда? Значит клиенту ключ не нужен?
22 сен 09, 13:28    [7692181]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
helloword
Member

Откуда:
Сообщений: 686
Паганель
helloword
Нужно для сторонего клиента
с одной таблицы сделать две и обединить их по ключу (int или bigint)
В Вашем тексте первая строчка противоречит второй
Объединять же сервер будет, а не клиент, правда? Значит клиенту ключ не нужен?


клиент будет объединять. Отчетная система
22 сен 09, 13:30    [7692204]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
как-то так
declare @dt datetime
set @dt = getdate()

select cast(1000 as bigint) * 60 * 60 * 24 * datediff(dd, '19700101', date_only)
     + datediff(ms, date_only, date_time)
  from (select @dt as date_time, convert(char(8), @dt, 112) as date_only) as t
подойдет?
22 сен 09, 13:39    [7692267]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Паганель
как-то так
declare @dt datetime
set @dt = getdate()

select cast(1000 as bigint) * 60 * 60 * 24 * datediff(dd, '19700101', date_only)
     + datediff(ms, date_only, date_time)
  from (select @dt as date_time, convert(char(8), @dt, 112) as date_only) as t
подойдет?

Мне просто интересно, а как преобразование из одного типа в другой сделает значения уникальными то ?
22 сен 09, 13:42    [7692293]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31213
helloword
Паганель
datetime это 8 байт
int это 4 байта
Преобразовать datetime в int невозможно


можно bigint?
select cast(cast(getdate() as binary(8)) as bigint)

Унакальность, понятное дело, останется такая, как и была до преобразования.
22 сен 09, 13:47    [7692335]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Glory
Мне просто интересно, а как преобразование из одного типа в другой сделает значения уникальными то ?
Не сделает, конечно, потому я и спрашиваю - подойдет ли
Но у меня подозрение, что дата/время должна быть источником значений "ключа автора"
в противном случае я вообще не понимаю, как это клиент будет записи между собой объединять
22 сен 09, 13:47    [7692337]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Смысле преобразовать в bigin нету. Ключ можно в datetime хранить.
Мне вот нужно получить уникальный datetime. Как прибавить минимальное значение к типу datetime?
22 сен 09, 13:52    [7692382]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Deff
Смысле преобразовать в bigin нету. Ключ можно в datetime хранить.
Мне вот нужно получить уникальный datetime. Как прибавить минимальное значение к типу datetime?

Что, извините, прибавить к datetime ?
22 сен 09, 13:54    [7692393]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
aleks2
Guest
Паганель
как-то так
declare @dt datetime
set @dt = getdate()

select cast(1000 as bigint) * 60 * 60 * 24 * datediff(dd, '19700101', date_only)
     + datediff(ms, date_only, date_time)
  from (select @dt as date_time, convert(char(8), @dt, 112) as date_only) as t
подойдет?


Чо париться то?
declare @dt datetime

set @dt=getdate()

select cast(datediff(day,0,@dt) as bigint)*256*256*256*256+datediff(ms,0,@dt-datediff(day,0,@dt))
22 сен 09, 13:55    [7692401]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Что-то я уже запутался
helloword и Deff - один и тот же человек?
22 сен 09, 13:56    [7692407]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Паганель
Что-то я уже запутался
helloword и Deff - один и тот же человек?

Скорее всего нет
22 сен 09, 13:57    [7692420]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Автор, а в исходной таблице datetime уникален?
22 сен 09, 13:59    [7692435]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
helloword
Member

Откуда:
Сообщений: 686
GreenSunrise
Автор, а в исходной таблице datetime уникален?


да ключ
22 сен 09, 14:03    [7692468]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Deff
Смысле преобразовать в bigin нету. Ключ можно в datetime хранить.
Мне вот нужно получить уникальный datetime. Как прибавить минимальное значение к типу datetime?

какой смысл вы вкладываете в словосочетание "уникальный datetime"?
22 сен 09, 14:04    [7692471]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Glory
Deff
Смысле преобразовать в bigin нету. Ключ можно в datetime хранить.
Мне вот нужно получить уникальный datetime. Как прибавить минимальное значение к типу datetime?

Что, извините, прибавить к datetime ?
У меня просто похожая задача. У меня несколько документов, они могуn провестись в одно время. Секунда в секунду. Так как таких документов не может быть очень много, я хочу добиться уникальности времения документов за счет миллисекунд.
Первый документ будет hh:mm:ss.000.
Второй hh:mm:ss.003.
Вот как к datetime прибавит минимальное значение?
22 сен 09, 14:05    [7692481]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше преобразовать datetime в int Уникально?  [new]
helloword
Member

Откуда:
Сообщений: 686
Это по моим исходным данным получ уникально)
select cast(datediff(day,0,@dt) as bigint)*256*256*256*256+datediff(ms,0,@dt-datediff(day,0,@dt))
22 сен 09, 14:06    [7692485]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить