2015-05-18 2 views
0

У меня есть 2 колонки таблицы со следующими данными:

[item_name] 
Free inodes on $1 

[item_key] 
vfs.fs.inode[/home,pfree] 

Я хотел бы написать отборное заявление, что места/дома, где $ 1 так, что у меня есть следующие вернулись:

Free inodes on /home 

Я перепробовал кучу различных поисков на Google, но я не знаю, как мне нужно, чтобы слово это, чтобы получить полезный результат.

ответ

1

Используйте функцию REPLACE для замены в SELECT.

SELECT REPLACE([item_name], '$1', '/home') FROM [table_name] 

Теперь, как вы упомянули в своих комментариях, «/ home» действительно может быть одним из нескольких разных путей. В этом случае решение становится более сложным. То, что я сделал ниже, записывается в запрос, который принимает подстроку ключа, используя первое местоположение символа '[' и идя до тех пор, пока не найдет символ ','.

SELECT 
REPLACE(
    [item_name], 
    '$1', 
    SUBSTRING(
     [item_key], 
     CHARINDEX(
      '[', 
      [item_key] 
     ) + 1, 
     CHARINDEX(
      ',', 
      [item_key], 
      CHARINDEX(
       '[', [item_key] 
      ) 
     ) - CHARINDEX(
       '[', [item_key] 
      ) - 1 
     ) 
    ) 
    FROM [table_name] 
+0

Thanks John, но проблема в том, что/home может быть/usr или/boot (или несколькими другими значениями). – thestepafter

+0

@thestepafter - Я отредактировал свой ответ, чтобы принять это во внимание для вас. –

+0

Если запятая перед «[», ваш ответ может быть намного короче. Тем не менее, вы можете сначала проверить, является ли формат значения ключа первым, чтобы избежать ошибок подстроки. – Tim3880

Смежные вопросы