Сокращение предыдущих решений -
var myDate = +new Date("2012-02-10T13:19:11+0000");
Он выполняет преобразование типа «на лету» и напрямую выводит дату в миллисекундах.
Другой способ также использует метод parse метода Date, который выводит время EPOCH в миллисекундах.
var myDate = Date.parse("2012-02-10T13:19:11+0000");
Если длина не постоянна, вы можете комбинировать функцию 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'
жезл, попробуйте вариант запроса ниже:
Замените 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, при этом индекс не будет использоваться, и вы должны извлечь это число в отдельный индексированный столбец для более производительного запроса. Надеюсь, это поможет!
Я бы обработал это так:
-- 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 в другом месте.