-- SQL Server will perform the filter and the conversion in either order
-- Note that Compute Scalar is plonked anywhere convenient in the execution plan
-- and may not relate to where it actually occurs, as here.
WITH SampleData AS (SELECT * FROM (VALUES ('1.2.1'), ('1'), ('1.1'), ('1.1.1')) V (S))
SELECT
s1.s,
NewVal = CASE WHEN s1.s NOT LIKE '%.%.%' THEN CONVERT(decimal(2,1),s1.s) ELSE NULL END
FROM SampleData s1, SampleData s2, SampleData s3
WHERE s1.s NOT LIKE '%.%.%' OR s2.s NOT LIKE '%.%.%';
WITH SampleData AS (SELECT * FROM (VALUES ('1.2.1'), ('1'), ('1.1'), ('1.1.1')) V (S))
SELECT
s1.s,
CONVERT(decimal(2,1),s1.s)
FROM SampleData s1, SampleData s2, SampleData s3
WHERE s1.s NOT LIKE '%.%.%' OR s2.s NOT LIKE '%.%.%';
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden