diff --git a/doc/protocol.xml b/doc/protocol.xml
index e5567c91f..d56b09fdd 100644
--- a/doc/protocol.xml
+++ b/doc/protocol.xml
@@ -2155,6 +2155,11 @@ OK
             <para>
               Searches for stickers with the given value.
             </para>
+
+            <para>
+              Other supported operators are:
+              "<function>&lt;</function>", "<function>&gt;</function>"
+            </para>
           </listitem>
         </varlistentry>
       </variablelist>
diff --git a/src/command/StickerCommands.cxx b/src/command/StickerCommands.cxx
index 07bed032e..fce53e162 100644
--- a/src/command/StickerCommands.cxx
+++ b/src/command/StickerCommands.cxx
@@ -155,6 +155,10 @@ handle_sticker_song(Client &client, ConstBuffer<const char *> args)
 
 			if (strcmp(op_s, "=") == 0)
 				op = StickerOperator::EQUALS;
+			else if (strcmp(op_s, "<") == 0)
+				op = StickerOperator::LESS_THAN;
+			else if (strcmp(op_s, ">") == 0)
+				op = StickerOperator::GREATER_THAN;
 			else {
 				command_error(client, ACK_ERROR_ARG,
 					      "bad operator");
diff --git a/src/sticker/Match.hxx b/src/sticker/Match.hxx
index 6165ffb84..a10a3a805 100644
--- a/src/sticker/Match.hxx
+++ b/src/sticker/Match.hxx
@@ -32,6 +32,18 @@ enum class StickerOperator {
 	 * exists.
 	 */
 	EQUALS,
+
+	/**
+	 * Matches if a sticker with the specified name exists with a
+	 * value smaller than the specified one.
+	 */
+	LESS_THAN,
+
+	/**
+	 * Matches if a sticker with the specified name exists with a
+	 * value bigger than the specified one.
+	 */
+	GREATER_THAN,
 };
 
 #endif
diff --git a/src/sticker/StickerDatabase.cxx b/src/sticker/StickerDatabase.cxx
index bd809c1d3..df6dc22dd 100644
--- a/src/sticker/StickerDatabase.cxx
+++ b/src/sticker/StickerDatabase.cxx
@@ -44,6 +44,8 @@ enum sticker_sql {
 	STICKER_SQL_DELETE_VALUE,
 	STICKER_SQL_FIND,
 	STICKER_SQL_FIND_VALUE,
+	STICKER_SQL_FIND_LT,
+	STICKER_SQL_FIND_GT,
 };
 
 static const char *const sticker_sql[] = {
@@ -64,6 +66,12 @@ static const char *const sticker_sql[] = {
 
 	//[STICKER_SQL_FIND_VALUE] =
 	"SELECT uri,value FROM sticker WHERE type=? AND uri LIKE (? || '%') AND name=? AND value=?",
+
+	//[STICKER_SQL_FIND_LT] =
+	"SELECT uri,value FROM sticker WHERE type=? AND uri LIKE (? || '%') AND name=? AND value<?",
+
+	//[STICKER_SQL_FIND_GT] =
+	"SELECT uri,value FROM sticker WHERE type=? AND uri LIKE (? || '%') AND name=? AND value>?",
 };
 
 static const char sticker_sql_create[] =
@@ -392,6 +400,16 @@ BindFind(const char *type, const char *base_uri, const char *name,
 		return BindAllOrNull(error,
 				     sticker_stmt[STICKER_SQL_FIND_VALUE],
 				     type, base_uri, name, value);
+
+	case StickerOperator::LESS_THAN:
+		return BindAllOrNull(error,
+				     sticker_stmt[STICKER_SQL_FIND_LT],
+				     type, base_uri, name, value);
+
+	case StickerOperator::GREATER_THAN:
+		return BindAllOrNull(error,
+				     sticker_stmt[STICKER_SQL_FIND_GT],
+				     type, base_uri, name, value);
 	}
 
 	assert(false);