It is always important when asking a question to include the version of SQL Server you are using.
Some of your data apparently does not ALWAYS have brackets. That is also important to know.
This should work:
CREATE TABLE TableName
(FieldName nvarchar(max))
INSERT INTO dbo.TableName
SELECT 'Test 1546 [JDFH]' UNION
SELECT 'Testing 562 [DFHI]' UNION
SELECT 'Test 316 [FF]' UNION
SELECT 'Testing 475 [KUGMF]' UNION
SELECT 'Test 5256 [DVDS]' UNION
SELECT 'Test 2565 [H]' UNION
SELECT 'Test no brackets'
SELECT
*,
CASE WHEN CHARINDEX('[',FieldName)>0 THEN LEFT(FieldName,CHARINDEX('[',FieldName)-1) ELSE FieldName END,
CASE WHEN CHARINDEX('[',FieldName)>0 AND CHARINDEX(']',FieldName)>0 THEN SUBSTRING(FieldName,CHARINDEX('[',FieldName)+1,CHARINDEX(']',FieldName) - CHARINDEX('[',FieldName) - 1) ELSE NULL END
FROM dbo.TableName