Я согласен с Джоэлом, что, если это вообще возможно, вы должны попытаться избавиться от прямых правок таблицы. Я также добавил бы, что обычно плохая идея так тесно связать вашу базу данных с вашим внешним кодом. Храните данные так, чтобы они лучше всего подходили для базы данных, и конвертируйте их по мере необходимости для любого внешнего кода.
Если вы не можете, то, возможно, эта первая попытка приблизит вас. Он не допускает полной точности, которую делает Timespan.Parse, потому что функция ISDATE () принимает значения только с точностью до 1000 секунды. Может быть, вы можете основываться на этом, хотя. Вычеркните вторые фракции, как я делал дни, и проверьте их отдельно. Хотя это мишка выражения.
CREATE TABLE dbo.Test_Timespan
(
my_string NVARCHAR(MAX) NOT NULL,
CONSTRAINT CK_Test_Timespan_my_string CHECK (CAST(SUBSTRING(RTRIM(LTRIM(my_string)), 1, CHARINDEX('.', RTRIM(LTRIM(my_string))) - 1) AS INT) BETWEEN -10675199 AND 10675199 AND ISDATE(SUBSTRING(RTRIM(LTRIM(my_string)), CHARINDEX('.', RTRIM(LTRIM(my_string))) + 1, LEN(my_string) - CHARINDEX('.', RTRIM(LTRIM(my_string))))) = 1)
)