Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Аналог функции Format() в T-SQL? / 19 сообщений из 19, страница 1 из 1
28.11.2003, 16:05
    #32337990
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Есть такой? необходимо представлять числовые данные (int) в виде стринга например так: '000012'
...
Рейтинг: 0 / 0
28.11.2003, 16:09
    #32337996
pavelch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Посмотрите функции преобразования форматов данных CAST и CONVERT
...
Рейтинг: 0 / 0
28.11.2003, 16:14
    #32338008
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Нашел пока такой вариант:
Код: plaintext
select replace(str( 15 , 6 , 0 ),' ','0')


2pavelch
Спасибо! :о)
Но мне не надо преобразования типов, мне как раз надо и хранить в виде '000012', а не получить вместо int 12 - char 12.
...
Рейтинг: 0 / 0
28.11.2003, 19:26
    #32338231
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
А ты не перемудрил?
...
Рейтинг: 0 / 0
01.12.2003, 11:02
    #32339122
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Pavel писал:А ты не перемудрил?

Если можно это сделать одной функцией, то перемудрил.
Если спрашиваешь: "На фига...". А нада! Хочу составной ключ для дерева...
...
Рейтинг: 0 / 0
01.12.2003, 11:12
    #32339150
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
А так не пробовал? Это не ключ, это служеьное поле, но идея, думаю, понятна.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
   0 
   0 .   1 
   0 .   1 .  25 
   0 .   1 .  25 .  73 
   0 .   1 .  25 .  73 . 119 
   0 .   1 .  25 .  73 . 120 
   0 .   1 .  25 .  74 
   0 .   1 .  25 .  75 
   0 .   1 .  25 .  75 . 121 
   0 .   1 .  25 .  75 . 122 
   0 .   1 .  25 .  76 
   0 .   1 .  25 .  77 
   0 .   1 .  25 .  78 
   0 .   1 .  25 .  79 
   0 .   1 .  26 
   0 .   1 .  26 .  80 
   0 .   1 .  26 .  81 
   0 .   1 .  26 .  81 . 123 
   0 .   1 .  26 .  81 . 124 
   0 .   1 .  26 .  82 
   0 .   1 .  26 .  82 . 125 
...
Рейтинг: 0 / 0
01.12.2003, 12:14
    #32339224
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Если это несколько полей (для каждого уровня 1 поле), то думал об этом - кажется заморочно.

если это одно поле и формируется путем сцепления ключей (ID), то это как раз попробовал в первую очередь, но - проблемы с сортировкой. Для текста 1, 11, 12...2, 21,22... Во-первых. Во-вторых сложности с вычислением ID произвольного уровня...
...
Рейтинг: 0 / 0
01.12.2003, 12:34
    #32339252
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Это одно поле. Проблема с сортировкой отсутствует, а ты, значит, идею не понял. Вычисление ID произвольного уровня это совершенно другая задача, и этим полем и не должна решаться.
P.S
Я так с деревьями не работаю, это компромисный вариант когда пришлось навешивать доработки к чужой системе.
...
Рейтинг: 0 / 0
01.12.2003, 12:35
    #32339255
IgorM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Попробуй так: select right('000000' + cast(12 as varchar(6)), 6)
...
Рейтинг: 0 / 0
01.12.2003, 12:54
    #32339285
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
2 Pavel

Значит и в самом деле твою идею не понял. :о<(( Если можешь расскажи подробнее, что это за цифирки там у тебя - откуда они взялись. Это не сцепка ParentID&ID?

IgorM писал:Попробуй так: select right('000000' + cast(12 as varchar(6)), 6)

Хорошая идея. Спасибо! Но тоже 2 функции используются. Вопрос только, что быстрее? Мой или твой вариант? Подозреваю, что различия будут нерзличимы.
...
Рейтинг: 0 / 0
01.12.2003, 12:59
    #32339292
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Pavel писал:Вычисление ID произвольного уровня это совершенно другая задача, и этим полем и не должна решаться

Почемуууу??? Т.е. почему не совместить приятное с полезным?
...
Рейтинг: 0 / 0
01.12.2003, 14:06
    #32339415
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Обьясняю идею. Это поле формируется на основании поля, определяющего порядок сортировки. Множество этих значений равно множеству значений ключей. При вставке новой записи автоматом полю сортировки присваивается значение ключа. В процессе работы можно менять (попарно) значения в поле сортировки. В правой части - значение поля именно этой записи, левее - ее предка, еще левее - предка предка, и так до вершины.
Обрати внимание, что в приведенном мной примере числа распологаются группами одно под другим. Наверное не очень удачный пример, покажу другой фрагмент:
Код: plaintext
1.
2.
 0 .   9 
 0 .  10 

Обрати внимание, в цифре 10 единица стоит на позицию левее. так что сортировка по этому полю отражает реальное (или желаемое) расположение элементов вдереве.
...
Рейтинг: 0 / 0
01.12.2003, 14:24
    #32339449
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
2Pavel
разделитель (.) в вашей модели лишний. Улучшает только читаемость. съедает размер поля.

не подскажете, чем это решение лучше связанной таблицы pid|id|level с индексами (pid,id) и (id,pid) (пополняемой так-же триггерами)?
...
Рейтинг: 0 / 0
01.12.2003, 15:09
    #32339543
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
фыыф
разделитель (.) в вашей модели лишний. Улучшает только читаемость. съедает размер поля.

Абсолютно точно. После отладки оставил для улучшения читаемости глазками. Практического смысла никакого.

не подскажете, чем это решение лучше связанной таблицы pid|id|level с индексами (pid,id) и (id,pid) (пополняемой так-же триггерами)?

Это самое корявое, но самое быстрое (всмысле скорости работы) решение.
К тому же, как я уже писал, в той ситуации другое решение применить было проблематично.
...
Рейтинг: 0 / 0
01.12.2003, 15:10
    #32339546
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Да, чтобы никого не ввести в заблуждение, естественно в таблице присутствует id, pid.
...
Рейтинг: 0 / 0
01.12.2003, 16:27
    #32339685
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Обрати внимание, в цифре 10 единица стоит на позицию левее.

А за счет чего она стоит левее? За счет пробела перед 9?
...
Рейтинг: 0 / 0
01.12.2003, 16:48
    #32339725
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
Возможно использовать пробел вместо 0 или 0 вместо пробела - одно и тоже. :))

2 фыыфу
не подскажете, чем это решение лучше связанной таблицы pid|id|level с индексами (pid,id) и (id,pid) (пополняемой так-же триггерами)?

М.б. - это и якши (зер гут, gut, хорошо), но для уникальной парочки pid,id, а она, к сожалению не уникальна. Для обеспечения уникальности пришлось бы стыковать еще, как минимум 2-3 поля. Потом заморочно вычислять имена предков.
...
Рейтинг: 0 / 0
02.12.2003, 14:06
    #32340752
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
поясню: имелась в виду триггерно пополняемая таблица всех потомков данного предка (что то же самое - всех предков данного потомка). Позволяет работать с деревом не рекурсивно (обычными SQL конструкциями - //так же как в предложенном случае, используя Like//). Таблицу несложно реализовать в виде триггера на каждую запись (заимствуя записи для предка, при вставке, или синхронно переписывая наборы записей всех потомков при перемещении их предка одним вызовом простой SQL конструкции). Естественно перемещение прикорневой ветки вызовет большие накладные расходы (переписать почти всю таблицу предков и перестроить индексы.). Этим решение мне и не нравится. Но ваш случай не кажется лучшим ( в смысле накладных расходов на перемещение веток). НАсчет скорости метода - не очевидно. Записей будет меньше, но длина записи - больше (к тому же неустранимо для вашей модели ограничение на число уровней).


По поводу замечаний Витала:

1. композиция вида pid|id уникальна
ибо данный предок встречается у потомка единственный раз если нет закольцовок, т.е. если дерево нормальное (какой-то там тудыть его граф). (тем самым мы закрываем дорогу к замыканию колец пользователям на уровне логики бд)

2. для случая с кольцами в наследовании (не думаю, что интересно для реализации) но единичным наследованием (единственный непосредственный предок pid) уникальной будет композиция:
pid|id|level -т.к. у одного потомка единственен предок определенного уровня

3. случай множественного наследования тоже можно просмотреть, но не думаю что найдется разумное применение.
...
Рейтинг: 0 / 0
03.12.2003, 17:53
    #32342431
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог функции Format() в T-SQL?
фыыф1. композиция вида pid|id уникальна

Если у тебя так, то я за тебя искренне рад. :о))

А теперь представь ситуацию (вполне реальную), когда в наборе на одном и том же уровне входимости встречаются два (3,4,5... n) одинаковых элементов. Казалось бы, достаточно указать только количество этих элементов и "дело в шляпе", если бы не требовалось различать для данного набора, например, позицию элемента в наборе, порядковый номер при комплектации, тип вхождения и т.д.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Аналог функции Format() в T-SQL? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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