Esta seria una forma,
Pero si lo pones en el where te pegara en el performance sobre todo si la estaras usando sobre una tabla con muchos registros.
Lo mejor seria hacer un proceso que obtenga este valor en un campo por separado para que no tengas que estar calculandolo cada vez que lo necesites..
Si es una tabla pequena o se ejecuta en el select (campos seleccionados) que siempre devuelve pocos valores no tendras problemas..
En fin ahi evalua la conveniencia de su uso..
Código:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fnReturnKeyValue]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fnReturnKeyValue]
GO
Create function dbo.fnReturnKeyValue (@strField as varchar(400))
returns char(1)
AS
Begin
return SUBSTRING(@strField, CHARINDEX('-', @strField, 1) - 1,1)
End
GO
SELECT dbo.fnReturnKeyValue(reverse('pgt-sds-100')) Field1
,dbo.fnReturnKeyValue(reverse('wew-ww-3')) Field2
,dbo.fnReturnKeyValue(reverse('eue-400')) Field3
Field1 Field2 Field3
------ ------ ------
1 3 4
(1 row(s) affected)
Saludos!