Дата передачи C # в процедуру Oracle - PullRequest
1 голос
/ 06 декабря 2011

Я передаю дату (DateTime.Now) из кода C # в процедуру Oracle.Я хотел получить все значения из таблицы между

DateTime.Now - 1 11:10:00 до DateTime.Now 11:09:59 AM

Какнаписать условие оракула для этого?

Примечание: столбец 'CreateDate' является датой

У меня есть это прямо сейчас ..

 CreateDate >= TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') - 1
 and CreateDate <  TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') + 1

Ответы [ 3 ]

1 голос
/ 06 декабря 2011

Для управления датой и временем оракула я использовал OracleCommand и параметры. например:

SELECT * FROM Table WHERE Date >= :date

с помощью OracleCommand вы можете сделать это:

OracleCommand myOracleCommand = new OracleCommand("SELECT * FROM Table WHERE Date >= :date", myOracleConnection);
myOracleCommand.Parameters.Add(":date", OracleDbType.DateTime).Value = myDate;
...

Я думаю, что это лучший способ передачи параметров, поскольку Oracle предоставляет набор инструкций для преобразования запроса и его выполнения на сервере.

1 голос
/ 06 декабря 2011

Вы можете делать математику в день, как вы предлагаете.Вот краткий пример (вы можете заменить свой DateTime.Now и правильную строку формата вместо моего жестко закодированного примера):

SELECT TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM', 'DD-MON-YYYY HH12:MI:SS PM'))
    + 11/24 + 10/(24*60) AS MyDate FROM dual;

MYDATE                    
------------------------- 
05-DEC-11 11:10:00 AM     

Обратите внимание, как я беру дату ввода, усекаю ее (чтобы получить дату безвремя), а затем добавьте часы и минуты к этой базовой дате.

Вы можете расширить это, чтобы использовать ключевое слово BETWEEN и получить это:

SELECT * FROM my_table
WHERE CreateDate BETWEEN TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM', 
  'DD-MON-YYYY HH12:MI:SS PM')) + 11/24 + 10/(24*60) - 1
AND TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM', 
  'DD-MON-YYYY HH12:MI:SS PM')) + 11/24 + 10/(24*60);

Или, если вывсегда пропускаете DateTime.Now вы можете просто использовать дату из базы данных:

SELECT * FROM my_table    
WHERE CreateDate BETWEEN TRUNC(sysdate) + 11/24 + 10/(24*60) - 1
AND TRUNC(sysdate) + 11/24 + 10/(24*60);
1 голос
/ 06 декабря 2011

В Oracle по умолчанию для операторов «-» и «+» используются дни.

CreateDate между (in_CreateDate-1) и (in_CreateDate + 1) должен работать.

Если проблема заключается в том, что вы действительно хотите, чтобы материал создавался в тот день, но временные метки вас не устраивают, оператор Oracle по умолчанию просматривает только количество дней, поэтому вы можете использовать

, где in_CreateDate-CreateDate = 0

(обратите внимание, что я обычно использую sql server, поэтому я не могу это проверить; это основано на чтении документации Oracle)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...