AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.08.2007, 19:13   #1  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Функции встроенного SQL для работы с датой
Как на встроенном SQL реализовать такой запрос:

X++:
SELECT CREATEDDATE, dateadd(MM, 2, CREATEDDATE), datediff(dd, dateadd(MM, 2, CREATEDDATE), getdate()) FROM SalesTable
Спасибо
Старый 08.08.2007, 19:16   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Выбрать CreatedDate, а потом уже с полученным курсором (значением поля этого) делать мутки со сравнением даты и т.д.
Старый 08.08.2007, 19:22   #3  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
язык, на котором я работаю, не позволяет это сделать с такой легкостью, как SQL. Другие варианты есть?
Старый 08.08.2007, 19:31   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Connection, Statement, RecordSet

Правда не понял про
"язык, на котором я работаю"
Старый 08.08.2007, 19:42   #5  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Я общаюсь с Акзаптой через COM интерфейсы. Наш продукт изпользует встроенный SQL для доступа к данным. Такова архитектура, хороша она или нет не мне решать - это стандарт.
Старый 08.08.2007, 22:53   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
эммм... не очень понимаю, почему вы отвергаете подход Ивана с курсором... Другого-то все равно ничего нет, если упираться именно во встроенный SQL.

Оператор select на встроенном SQL выбирает по одной записи (он не выбирает набор, как обычный SQL, который можно сразу всем набором куда-то передать дальше). Для прохода по всем записям, удовлетворяющим условиям where или join'ам, после первого select'a используется оператор next до тех пор, пока не кончится набор записей, либо вместо select сразу используется конструкция while select. В любом случае записи выбираются друг за другом в некотором цикле. Поэтому у вас должен быть этот самый "зазор" между записями, в течение которого вы и сможете сосчитать все свои функции от дат (какие-то полезные функции дат вроде есть в классе Global).

Я далек от мысли, что у вас написан какой-то свой движок, который в качестве параметра съедает строку на внутреннем SQL и возвращает обратно сразу весь набор, скрывая цикл в себе так, что вы не можете никак вмешаться в его выполнение со своими дополнительными вычислениями.

В любом случае никаких вычислений (агрегаты, получаемые при помощи group by, не в счет), а также вызовов функций во встроенном select делать нельзя по определению. Ведь выбираемая из реальной таблицы запись помещается в переменную типа запись той же структуры, что и сама таблица. Поэтому при выполнении оператора select A, B from Table1 значения из полей A и B очередной записи таблицы будут помещены в поля A и B табличной переменной Table1. Аксапта не даст вам выполнить оператор select A, B, A+B from Table1, потому что у табличной переменной Table1 нет ячейки для хранения выражения A+B.
Старый 09.08.2007, 00:56   #7  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Цитата:
Сообщение от Gustav Посмотреть сообщение
В любом случае никаких вычислений (агрегаты, получаемые при помощи group by, не в счет), а также вызовов функций во встроенном select делать нельзя по определению. Ведь выбираемая из реальной таблицы запись помещается в переменную типа запись той же структуры, что и сама таблица. Поэтому при выполнении оператора select A, B from Table1 значения из полей A и B очередной записи таблицы будут помещены в поля A и B табличной переменной Table1. Аксапта не даст вам выполнить оператор select A, B, A+B from Table1, потому что у табличной переменной Table1 нет ячейки для хранения выражения A+B.
Гениально! Теперь понятно, почему это мне в голову не пришло раньше.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
использовать PostgreSQL в приложениях, разработанных для работы с MS SQL. otkudao DAX: Администрирование 2 14.03.2008 11:41
Dynamics AX: SQL Server, Heart of Dynamics AX Blog bot DAX Blogs 0 13.07.2007 18:00
Агрегатные функции встроенного SQL Jab Straight DAX: Программирование 7 28.06.2007 23:30
Как в Аксапта создать аналог функции MS SQL ? stavteam DAX: Программирование 5 15.12.2004 17:16
Есть ли функции работы со строками? kostas DAX: Программирование 2 13.05.2004 11:50

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:23.