SQL-сервер ГДЕ между числами, которые имеют префикс / суффикс текста

Сокращение предыдущих решений -

var myDate = +new Date("2012-02-10T13:19:11+0000");

Он выполняет преобразование типа «на лету» и напрямую выводит дату в миллисекундах.

Другой способ также использует метод parse метода Date, который выводит время EPOCH в миллисекундах.

var myDate = Date.parse("2012-02-10T13:19:11+0000");
0
задан ADyson 17 January 2019 в 16:25
поделиться

3 ответа

Если длина не постоянна, вы можете комбинировать функцию reverse дважды, чтобы исключить цифры first 3 и last 4:

SELECT id FROM tablename WHERE
substring(reverse(substring(reverse(serialnumber),5)),4) >= 4110380 AND
substring(reverse(substring(reverse(serialnumber),5)),4) <= 4111317

тест:

substring(reverse(substring(reverse('G4A41103801702'),5)),4) ==> '4110380'
0
ответ дан Indent 17 January 2019 в 16:25
поделиться

жезл, попробуйте вариант запроса ниже:

Замените id на столбец, который вы хотите выбрать.

Замените tablename реальным именем таблицы.

Предполагается, что serialnumber - это имя столбца с серийным номером, к которому необходимо выполнить запрос.

Предполагается, что длина серийного номера является постоянной.

SELECT id FROM tablename WHERE
CAST(SUBSTRING(serialnumber, 4, 7) as int) >= 4110380 AND
CAST(SUBSTRING(serialnumber, 4, 7) as int) <= 4111317

Как упоминалось @ADyson, при этом индекс не будет использоваться, и вы должны извлечь это число в отдельный индексированный столбец для более производительного запроса. Надеюсь, это поможет!

0
ответ дан Sean Kennedy 17 January 2019 в 16:25
поделиться

Я бы обработал это так:

-- Sample data
DECLARE @table TABLE (col1 VARCHAR(100));
INSERT @table (col1)
VALUES ('G4A41103801702 - G4A41113171702');

-- solution
SELECT 
  c1=SUBSTRING(s.s1,PATINDEX(p.P,s.s1),7), 
  c2=SUBSTRING(s.s2,PATINDEX(p.P,s.s2),7)
FROM   @table AS t
CROSS JOIN  (VALUES('%'+REPLICATE('[0-9]',7)+'%'))  AS p(P)
CROSS APPLY (VALUES(CHARINDEX('-',t.col1)))         AS br(b)
CROSS APPLY (VALUES(SUBSTRING(t.col1,1,br.b-1), 
                    SUBSTRING(t.col1,br.b+1,8000))) AS s(s1,s2);

Возвращает:

c1      c2
------- -------
4110380 4111317

Затем вы можете использовать c1 и c2 в другом месте.

0
ответ дан Alan Burstein 17 January 2019 в 16:25
поделиться
Другие вопросы по тегам:

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