SQL Server MS “между” включают границы диапазона?

Все возможно в Ruby. Rails - это просто веб-фреймворк. Если вы спрашиваете, есть ли в Ruby, Rails или скрепке что-то вроде

Image.first.blurred?

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

OpenCV была бы хорошей библиотекой для такой функциональности. Его используют в тоннах случаев, когда требуется визуальный анализ. Для него есть также оболочка в ruby.

Конечно, для вашего случая использования вы должны создать для него небольшую библиотеку. Здесь у вас есть пример на python, который, несомненно, можно легко перевести на ruby. Когда вы получили эту работу, вы даже могли бы реализовать некоторое расширение модели, чтобы включить

SomeObject.blurred?

228
задан Tomasz Kowalczyk 8 August 2014 в 00:57
поделиться

4 ответа

Оператор BETWEEN является включающим.

From Books Online:

BETWEEN возвращает TRUE, если значение test_expression больше чем или равно значению begin_expression и меньше или равно значению end_expression.

DateTime Caveat

NB: с DateTimes вы должны быть осторожны; если указана только дата, значение берется по состоянию на полночь этого дня; во избежание пропуска времени в вашей конечной дате или повторения захвата данных следующего дня в полночь в нескольких диапазонах ваша конечная дата должна быть за 3 миллисекунды до полуночи следующего дня после вашей даты. 3 миллисекунды, потому что любое значение меньше этого значения будет округлено до полуночи следующего дня.

Например, чтобы получить все значения в течение июня 2016 года, вам нужно выполнить:

где myDateTime между «20160601» и DATEADD ( миллисекунда, -3, «20160701»)

, т. е.

, где myDateTime между «20160601 00: 00: 00.000» и «20160630 23: 59: 59.997»

datetime2 и datetimeoffset

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

where myDateTime >= '20160601' AND myDateTime < '20160701'
252
ответ дан Ian Boyd 23 November 2019 в 03:44
поделиться

Yes, but be careful when using between for dates.

BETWEEN '20090101' AND '20090131'

is really interpreted as 12am, or

BETWEEN '20090101 00:00:00' AND '20090131 00:00:00'

so will miss anything that occurred during the day of Jan 31st. In this case, you will have to use:

myDate >= '20090101 00:00:00' AND myDate < '20090201 00:00:00'  --CORRECT!

or

BETWEEN '20090101 00:00:00' AND '20090131 23:59:59' --WRONG! (see update!)

UPDATE: It is entirely possible to have records created within that last second of the day, with a datetime as late as 20090101 23:59:59.997!!

For this reason, the BETWEEN (firstday) AND (lastday 23:59:59) approach is not recommended.

Use the myDate >= (firstday) AND myDate < (Lastday+1) approach instead.

Good article on this issue here.

251
ответ дан Ian Boyd 23 November 2019 в 03:44
поделиться

МЕЖДУ (Transact-SQL)

Указывает ( n ) ( включительно ) диапазон для проверки.

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

Аргументы

 test_expression

Является ли выражение для проверки в диапазоне, определенном begin_expression и end_expression. test_expression должен быть того же типа данных, что и оба begin_expression и end_expression.

 НЕ

Указывает, что результат предиката должен быть отменен.

 begin_expression

Любое допустимое выражение. begin_expression должно быть одинаковыми данными введите как test_expression и end_expression.

 end_expression

Является ли любое допустимое выражение. end_expression должно быть одинаковыми данными введите как test_expression и begin_expression.

 И

Действует как заполнитель, который указывает, что test_expression должно быть в диапазоне, указанном begin_expression и end_expression.

Замечания

Чтобы указать исключительный диапазон, используйте больше чем (>) и меньше чем операторы (<). Если какой-либо вклад в МЕЖДУ или НЕ МЕЖДУ предикатом является NULL, результат UNKNOWN.

Result Value

BETWEEN возвращает TRUE, если значение test_expression больше чем или равно значению begin_expression и меньше или равно значению end_expression.

NOT BETWEEN возвращает TRUE, если значение test_expression меньше чем значение begin_expression или больше чем значение end_expression.

12
ответ дан Kolappan N 23 November 2019 в 03:44
поделиться

Реальный пример из SQL Server 2008.

Source data:

ID    Start
1     2010-04-30 00:00:01.000
2     2010-04-02 00:00:00.000
3     2010-05-01 00:00:00.000
4     2010-07-31 00:00:00.000

Query:

SELECT
    *
FROM
    tbl
WHERE
    Start BETWEEN '2010-04-01 00:00:00' AND '2010-05-01 00:00:00'

Results:

ID    Start
1     2010-04-30 00:00:01.000
2     2010-04-02 00:00:00.000

alt text

16
ответ дан 23 November 2019 в 03:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: