В идеале вы должны стараться избегать хранения данных в этой форме - стоило бы разбить данные BIGINT на отдельный столбец как для производительности, так и для упрощения запросов.
Однако вы можете сделать JOIN, как в этом примере. Обратите внимание, что я не использую ISNUMERIC () , чтобы определить, является ли это BIGINT действительным, потому что это проверит неправильные значения, что приведет к ошибке преобразования (например, десятичные числа).
DECLARE @MyTable TABLE (MyCol VARCHAR(20))
DECLARE @OtherTable TABLE (Id BIGINT)
INSERT @MyTable VALUES ('1')
INSERT @MyTable VALUES ('Text')
INSERT @MyTable VALUES ('1 and some text')
INSERT @MyTable VALUES ('1.34')
INSERT @MyTable VALUES ('2')
INSERT @OtherTable VALUES (1)
INSERT @OtherTable VALUES (2)
INSERT @OtherTable VALUES (3)
SELECT *
FROM @MyTable m
JOIN @OtherTable o ON CAST(m.MyCol AS BIGINT) = o.Id
WHERE m.MyCol NOT LIKE '%[^0-9]%'
Обновление:
Единственный способ найти его для работы с предложением WHERE для определенного целочисленного значения без выполнения еще одного CAST () для предположительно столбца bigint в предложении where - это использовать пользовательскую функцию:
CREATE FUNCTION [dbo].[fnBigIntRecordsOnly]()
RETURNS @Results TABLE (BigIntCol BIGINT)
AS
BEGIN
INSERT @Results
SELECT CAST(MyCol AS BIGINT)
FROM MyTable
WHERE MyCol NOT LIKE '%[^0-9]%'
RETURN
END
SELECT * FROM [dbo].[fnBigIntRecordsOnly]() WHERE BigIntCol = 1
Не думаю, что это отличная идея с точки зрения производительности, но это решение