As others have mentioned, this kind of check is MUCH better suited for the application responsible of writing the data into the database in the first place. One reason is that SQL is downright horrible for advanced string operations.
But if you really must do it using SQL, something like this should point you in the right direction:
SELECT Password,
CASE WHEN
Password COLLATE Latin1_General_BIN LIKE '%[a-z]%[a-z]%' AND
Password COLLATE Latin1_General_BIN LIKE '%[A-Z]%[A-Z]%' AND
Password LIKE '%[0-9]%[0-9]%' AND
Password LIKE '%[~!@#$%^&]%[~!@#$%^&]%' AND
LEN(Password) >= 8
THEN 1 ELSE 0 END AS Valid
FROM TableWithPasswords
The "Valid" column will contain a 1 if the password satisfies the criteria of the CASE statements, 0 otherwise. If you want to add more special characters to the 4th requirement remember to escape them properly, according to this: http://technet.microsoft.com/en-us/library/ms179859.aspx
Note the COLLATE statements - this is to ensure case sensitive comparisons for the LIKE operator.