Eu estou fazendo um sistema de monitoramento de manejo florestal, traduzindo em miúdos (Chips em árvore) para a IWF Planet.
- Essa vai ser fácil de encontrar no Google.
CREATE FUNCTION dbo.ConvertDMStoDM(@DMS VARCHAR(50))
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE
@GRAU DECIMAL(10),
@MINUTO DECIMAL(10,3),
@SEGUNDOS DECIMAL(20, 8)
SET @DMS = REPLACE(REPLACE(REPLACE(REPLACE(@DMS, '''', '$'), '°', '$'), '"', '$'), ',', '.')
DECLARE @TextoTemp VARCHAR(255)
DECLARE @i INT
SET @TextoTemp = LOWER(@DMS)
IF (PATINDEX('%$%', @TextoTemp) > 0)
BEGIN
SET @GRAU = CONVERT(DECIMAL(10), SUBSTRING(@TextoTemp, 1, PATINDEX('%$%', @TextoTemp)-1))
SET @TextoTemp = SUBSTRING(@TextoTemp, PATINDEX('%$%', @TextoTemp)+1, LEN(@TextoTemp))
END
IF (PATINDEX('%$%', @TextoTemp) > 0)
BEGIN
SET @MINUTO = CONVERT(DECIMAL(10,3), SUBSTRING(@TextoTemp, 1, PATINDEX('%$%', @TextoTemp)-1))
SET @TextoTemp = SUBSTRING(@TextoTemp, PATINDEX('%$%', @TextoTemp)+1, LEN(@TextoTemp))
END
IF (PATINDEX('%$%', @TextoTemp) > 0)
BEGIN
SET @SEGUNDOS = CONVERT(DECIMAL(20, 8), SUBSTRING(@TextoTemp, 1, PATINDEX('%$%', @TextoTemp)-1))
SET @TextoTemp = SUBSTRING(@TextoTemp, PATINDEX('%$%', @TextoTemp)+1, LEN(@TextoTemp))
END
RETURN(CONVERT(VARCHAR(50), ((@GRAU * 3600 + @MINUTO * 60 + @SEGUNDOS)/3600)*-1))
END
GO
/* Testando a funcão */
SELECT dbo.ConvertDMStoDM('15°34''50.5297"S')
Um comentário:
Muito bom, obrigado por compartilhar!
Postar um comentário