|
|
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
вопрос сбствно такой, табличка из MSSQL, в ней поле даты, если новая запись то там 01.01.1900 .... в фоксе для обнаружения таких записей мы использовали empty() теперь она не работает, писать = 01.01.1900 не хочется, что применить для ловли этих записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 19:11 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Я в таком случае записываю NULL. И при вызове этого значения делаю проверку на NULL, а там требуемые действия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 20:45 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
НедоходящийЯ в таком случае записываю NULL. И при вызове этого значения делаю проверку на NULL, а там требуемые действия. т.е. необходимо принудительно вставлять null ? сам скл нил не вставляет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 06:32 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
фокс НедоходящийЯ в таком случае записываю NULL. И при вызове этого значения делаю проверку на NULL, а там требуемые действия. т.е. необходимо принудительно вставлять null ? сам скл нил не вставляет? Вставляет, вставляет, если у вас в поле не определен Constraint DEFAULT или объект Defaults и в этом поле разрешено хранить NULL. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 09:23 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Да,да. Нужно в нужной табле открыть окно св-во и найти там требуемое поле и поставить галочку NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 10:17 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
НедоходящийДа,да. Нужно в нужной табле открыть окно св-во и найти там требуемое поле и поставить галочку NULL. Угу, НО при этом если эта база разрабатывалась не вами и с ней работает еще какое то приложение, то можете огрести кучу неприятностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 10:22 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
2 AleksMed Цэ точно!. Поэтому "фокс-у" придеться проконсультироваться с создателем этой базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2006, 10:25 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Да нет ребята, вы не правы... в SQL именно null и стоит (галочка) , только для SQL это не нул а именно 01.01.1900. А фкспро его так и воспринимает. И признака никакого нет, чтобы выделить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 09:22 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Лично я типом datetime в MSSQL не пользуюсь, храню дату как строку char(10) в виде dd/mm/yyyy. И нет никаких заморочек с записями, в которых "нет даты", и не надо в запросах конвертить дату из того вида, в котором хранит ее сервер в удобоваримый вид с помощью convert(char(10),дата,103). А для выборок на сервере строка dd/mm/yyyy прекрасно кастуется в тип datetime, причем как мною, так и автоматически самим сервером. Я отказался от использованием datetime именно из-за головняков с записями в которых "нет даты". Потому-что приходилось постоянно как-то извращаться и на клиенте отслеживать это дело, чтобы юзер видел не NULL и не 01/01/1900, а просто "пустой столбец" или маску ввода даты / / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 09:54 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
фоксв SQL именно null и стоит (галочка) , только для SQL это не нул а именно 01.01.1900. А фкспро его так и воспринимает. И признака никакого нет, чтобы выделить. Проблема в том, что у MS SQL нет такого понятия как "пустая дата". Когда он получает от FoxPro "пустую дату" он воспринимает это как "самую маленькую" дату. А это как раз и есть 01.01.1900. Т.е. надо ПЕРЕД отправкой на сервер даты конвертировать "пустую дату" в значение NULL или же ПОСЛЕ приема даты с сервера конвертировать 01.01.1900 в пустую дату. Наиболее простой вариант, это вместо пустой даты записывать значение NULL, а для отображения пустой строки использовать настройку SET NULLDISPLAY или свойство конкретного объекта NullDisplay Программизд 01Лично я типом datetime в MSSQL не пользуюсь, храню дату как строку char(10) в виде dd/mm/yyyy. И нет никаких заморочек с записями, в которых "нет даты", и не надо в запросах конвертить дату из того вида, в котором хранит ее сервер в удобоваримый вид с помощью convert(char(10),дата,103). Зато есть заморочки с сортировкой по таким полям. Для правильной сортировки по дате это должна быть строка вида yyyy/mm/dd. Или же постоянно конвертировать ее в тип DateTime во всех выборках. Программизд 01А для выборок на сервере строка dd/mm/yyyy прекрасно кастуется в тип datetime, причем как мною, так и автоматически самим сервером. А вот "автоматическая трансляция" зависит от текущей настройки SET DATEFORMAT Т.е. надо постоянно помнить, чем такой автоматизм обеспечиватся. Иначе однажды может и не произойти этой автоматической трансляции. Универсальным форматом для MS SQL является символьная строка вида "YYYYMMDD". Вот этот формат автоматически преобразуется в дату вне зависимости от текущей настройки SET DATEFORMAT и обеспечивает корректную сортировку даже в символьном виде без преобразования в дату. Его недостатком является именно корректный перевод со стороны FoxPro. Т.е. из даты такую строку легко сделать через DTOS(), а вот обратно в дату - уже не так просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 19:32 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
ВладимирМЗато есть заморочки с сортировкой по таким полям. Для правильной сортировки по дате это должна быть строка вида yyyy/mm/dd. Или же постоянно конвертировать ее в тип DateTime во всех выборках. Абсолютно никаких: 1) На стороне сервера - ORDER BY CAST(дата AS DATETIME) 1) На стороне фокса - СTOD прямо в control source колонки грида ВладимирМ А вот "автоматическая трансляция" зависит от текущей настройки SET DATEFORMAT Т.е. надо постоянно помнить, чем такой автоматизм обеспечиватся. Иначе однажды может и не произойти этой автоматической трансляции. Универсальным форматом для MS SQL является символьная строка вида "YYYYMMDD". Вот этот формат автоматически преобразуется в дату вне зависимости от текущей настройки SET DATEFORMAT и обеспечивает корректную сортировку даже в символьном виде без преобразования в дату. Его недостатком является именно корректный перевод со стороны FoxPro. Т.е. из даты такую строку легко сделать через DTOS(), а вот обратно в дату - уже не так просто. Конечно нужно помнить. И поменьше трогать настройки SET, в идеале их вообще оставляя по-умолчанию. Идеального варианта на все случаи жизни нет. Но мой метод для моих условий - наименее геморройный в плане лишних телодвижений и заморочек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2006, 19:53 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
2 Программизд 01 Не думаю. С DateTime гораздо легче делать выборку и сортировку, я работаю так чтоб поменьше было символьных строк. Потому что с символьными строками трудностей больше возникает. Конечно есть неприятная вещь со стороны MS SQL. Она заключаеться в том что при копировании даты в курсор фокса заноситься дата и время. Чтоб избавиться от времени и оставить дату. призодиться прописывать CTOD(DTOC()). И получаем чистую дату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 13:06 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Программизд 01 ВладимирМЗато есть заморочки с сортировкой по таким полям. Для правильной сортировки по дате это должна быть строка вида yyyy/mm/dd. Или же постоянно конвертировать ее в тип DateTime во всех выборках. Абсолютно никаких: 1) На стороне сервера - ORDER BY CAST(дата AS DATETIME) Это называется - не дай серверу использовать индексы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 13:09 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
ВладимирМПроблема в том, что у MS SQL нет такого понятия как "пустая дата". Когда он получает от FoxPro "пустую дату" он воспринимает это как "самую маленькую" дату. А это как раз и есть 01.01.1900. Ну это не совсем так. Самая маленькая дата для datetime = 1.1.1753, а вот для smalldatetimeона действительно равно 1.1.1900, но пустую дату сервер все рано берет 1.1.1900 в не зависимости от типа (datetime или smalldatetime) Я предпочитаю на сервер оставлять пустые даты в виде NULL, а на клиенте: переводить ее в пустую дату: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 13:21 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Glory 1) На стороне сервера - ORDER BY CAST(дата AS DATETIME) Это называется - не дай серверу использовать индексы[/quot] А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 13:29 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Программизд 01 А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент. Именно для ORDER BY и необходим индекс по полю (выражению) сортировки. Иначе, серверу придется сортировать данные "на лету". Это одна из самых "дорогих" операций. Посомотрите план выполнения запроса - сами все увидите. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 13:34 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Программизд 01 Glory 1) На стороне сервера - ORDER BY CAST(дата AS DATETIME) Это называется - не дай серверу использовать индексы А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент. Не мне, а серверу. Про 99% случаев я бы тоже не говорил так уверенно. Наличие ORDER BY в тексте запроса может привести к испольхованию индекса и в ходе выполнения запроса. Например, выборка записей и их обработка могут осуществляться уже по индексу. Именно с той целью, чтобы не делать упорядочивание конечного результата ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 13:59 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Aleksey-K Программизд 01 А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент. Именно для ORDER BY и необходим индекс по полю (выражению) сортировки. Ну не скажите! А если у меня сто стобцов в таблице и теоритически сортироваться может каждый, то что прикажите делать ? Вешать индекс на каждый столбец ? Aleksey-K Иначе, серверу придется сортировать данные "на лету". Это одна из самых "дорогих" операций. Посомотрите план выполнения запроса - сами все увидите. С уважением, Алексей. Вот поэтому никогда ничего не сортирую на сервере, благо фокс позволяет это делать без проблем после получения итоговой выборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 14:01 |
|
||
|
Дата в MSSQL
|
|||
|---|---|---|---|
|
#18+
Программизд 01 Aleksey-K Программизд 01 А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент. Именно для ORDER BY и необходим индекс по полю (выражению) сортировки. Ну не скажите! А если у меня сто стобцов в таблице и теоритически сортироваться может каждый, то что прикажите делать ? Вешать индекс на каждый столбец ? В любой системе всегда ищется компромисс. Если вероятность выбора пользователем столбца для сортировки мала, то нет смысла тратить ресурсы для индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2006, 14:08 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33495421&tid=1592547]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 281ms |
| total: | 519ms |

| 0 / 0 |
